2013-12-17 4 views
0

사용 django : 나는 2 개의 동일한 데이터베이스 테이블에 동의해야합니다, 그것을 실행하는 방법을 모르겠다.django : 어떻게 템플릿 쿼리 두 데이터 테이블

장고는 views.py의 :

from django.shortcuts import render 
from book.models import article, update 
from django.http import HttpResponse 
from django.template import RequestContext, loader 
from django.shortcuts import render_to_response 


# Create your views here. 
def home(request): 
    return HttpResponse("Hello world!") 

def article_list(request, id): 
    articles = article.objects.get(id = id) 
    return render_to_response('article.html', {'article':articles}) 

def title_list(request, id): 
    updates = update.objects.filter(bookid = id) 
    return render_to_response('article.html', {'update':'updates'}) 

와 urls.py :

from django.conf.urls import patterns, include, url 
from book import views 
#, article, update 
from django.contrib import admin 
admin.autodiscover() 
from django.conf import settings 

urlpatterns = patterns('', 
    url(r'^templates/(?P<path>.*)$', 
     'django.views.static.serve', 
     {'document_root': '/home/hugo/sobook/book/templates'}), 
    url(r'^$', views.home, name='home'), 
    # url(r'^blog/', include('blog.urls')), 
    url(r'^b/(\d{1,9})/$', views.article_list, name='article_list'), 
    url(r'^b/(\d{1,9})/$', views.title_list, name='title_list'), 
    url(r'^admin/', include(admin.site.urls)), 
    ) 

및 models.py :

from django.db import models 
from django.contrib import admin 

class article(models.Model): 
    name = models.CharField(max_length=20) 
    #name = models.ManyToManyField(update) 
    category = models.CharField(max_length=20) 
    page_url = models.CharField(max_length=100) 
    page_title = models.CharField(max_length=100) 
    author = models.CharField(max_length=20) 
    intro = models.CharField(max_length=500) 
    img_url = models.CharField(max_length=100) 
    state = models.CharField(max_length=10) 
    siteid = models.CharField(max_length=2) 
    sitename = models.CharField(max_length=20) 
    time = models.CharField(max_length=20) 

    def __unicode__(self): 
     return self.name 

class update(models.Model): 
    siteid = models.CharField(max_length=2) 
    bookid = models.CharField(max_length=50) 
    name = models.CharField(max_length=20) 
    #name = models.ManyToManyField(article) 
    time = models.CharField(max_length=20) 
    page_url = models.CharField(max_length=100) 
    page_title = models.CharField(max_length=100) 

및 템플릿 : article.html :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
    <head> 
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
     <link href="/templates/screen.css" rel="stylesheet" type="text/css" media="screen" /> 
    <title>{{article.name}}</title> 
    </head> 
    <body> 
<h1>{{article.name}}</h1> 
<ul><li><img src='{{article.img_url}}' width="100px"/></li> 
<li>作者:{{article.author}} </li> 
<li>简介: {{article.intro}}</li> 
<li>入库时间:{{article.time|date:"F j, Y" }}</li> 
<li>小说状态:{{article.state}}</li> 
<li><a href="{{article.page_url}}" title="{{article.name}}">{{article.page_title}}</a></li> 
</ul> 
<div class="list"> 
<table border="1"> 
<tr> 
    <th>最新章节</th> 
    <th>来源</th> 
    <th>更新时间:{{ title_list.page_title }}</th> 
</tr> 
{% for person in title_list %} 
<tr> 
    <td><a href="{{ person.page_url }}">{{ person.page_title }}</a></td> 
    <td>{{ person.sitename }}</td> 
    <td>{{ person.time }}</td> 
</tr> 
{% endfor %} 
</table> 
</div> 
</body> 
</html> 

접근 :

로컬 호스트/B/12/

views.py title_list

모든 다른 표시 정상적인 쿼리하지나요?.

+5

URL은 두 개의보기를 가리킬 수 없습니다. 그건 전혀 말이되지 않습니다. –

답변

0

하나의 실수는보기에 있습니다.

from django.shortcuts import render 
from book.models import article, update 
from django.http import HttpResponse 
from django.template import RequestContext, loader 
from django.shortcuts import render_to_response 


# Create your views here. 
def home(request): 
    return HttpResponse("Hello world!") 

def article_list(request, id): 
    articles = article.objects.get(id = id) 
    return render_to_response('article.html', {'article':articles}) 

def title_list(request, id): 
    updates = update.objects.filter(bookid = id) 
    # You are passing the string 'updates' along instead of the queryset 
    #return render_to_response('article.html', {'update':'updates'}) 
    return render_to_response('article.html', {'update':updates}) 

더 많은 의견을 보려면 "title_list"라는 변수가 있어야합니다. 그러나이 옵션은 제공되지 않습니다. 대신 "업데이트"를 의미 할 수도 있습니다.

템플릿에서 title_list는 업데이트 인스턴스와 쿼리 세트로 참조됩니다. 당신은 {{ title_list.page_title }}{% for person in title_list %}을 가지고 있습니다. 이것은 실제로 생성 한 실제 개체가 아니며 오류 일 가능성이 큽니다.

URL에서 동일한 경로에 대해 두 가지보기를 포기합니다. 이것은 단순히 불가능합니다. 각 URL은보기를 가리켜 야합니다. 동일한 URL에 여러보기가 할당 될 수 없습니다.

url(r'^b/(\d{1,9})/$', views.article_list, name='article_list'), 
url(r'^b/(\d{1,9})/$', views.title_list, name='title_list'), 
+0

동일한 URL에서해야 할 두 가지보기를 할당해야합니다. 예를들 수 있습니다. 방금 ​​장고를 익숙하지 않은 곳에서 연습하고, 고치고 싶습니다. 고마워요! – user3073973

+0

보기에서 수행하고자하는 질문에 대해 자세히 설명해 주시겠습니까? 'article'과'update' 사이의 링크는 무엇입니까? 왜 그들은 같은 URL을 공유해야합니까? 대신보기를 하나에 병합 할 수는 없습니까? – EWit

+0

그런 소설이 있습니다.이 소설은 많은 장이 있습니다. 소설, 나는 정보의 모든 측면 (예 : 작가, 업데이트 시간 및 소설 소개)을 작성하여 테이블을 만듭니다. 기사, 빌드 할 각 장의 소설 테이블 : 업데이트 (다른 ​​이름으로 변경 가능),보기에서 정보를 보여주고 소설의 장을 업데이트하기를 바랍니다. – user3073973