2013-07-05 42 views
0

我正在使用Django 1.5.1,现在我有一个网页显示了多个来自我的数据库的条目,但现在我想为它自己的每个条目都有一个页面。所以基本上当用户点击标题时,它会将它们带到单独的页面,只显示他们点击的条目。每个特定条目都有一个页面 - Django

我收到以下错误:

NameError at/
name 'Post' is not defined 

下面是我的,我认为是有关解决这一问题的每个页面的代码。我还创建了一个post.html页面,这样就不会出现我的错误,views.py和urls.py存储在Django的默认目录中,我的post.html和index.html存储在/ mysite/mysite /模板/博客/

的index.html

{% extends 'base.html' %} 
{% block title %} Roadcase WebApp {% endblock %} 
{% block content %} 
    <h1>Roadcase WebApp</h1> 
    <p>Today's Date: {% now "F j, Y" %}</p> 
    <div class="post"> 
     <table class="main"> 
      <tr class="title_head"> 
       <td><a href="">ID</a></td> 
       <td><a href="">Roadcase</a></td> 
       <td><a href="">User</a></td> 
       <td><a href="">Location</a></td> 
       <td><a href="">Date Taken</a></td> 
       <td><a href="">Return Date</a></td> 
       <td><a href="">Returned</a></td> 
      </tr> 
    {% for post in posts %} 
      <tr> 
       <td><a class="n_link" href="/blog/{{post.id}} ">{{post.id}}</a></td> 
       <td>{{post.Roadcase_Number}}</td> 
       <td>{{post.First_Name}} {{post.Last_Name}}</td> 
       <td>{{post.Where_Did_It_Go}}</td> 
       <td>{{post.Date_Taken|date}}</td> 
       <td>{{post.Date_Returned|date}}</td> 
       <td>{% if post.Returned == True %} 
         Yes 
        {% else %} 
         No 
        {% endif %}</td> 
      </tr> 
    {% endfor %} 
    </table> 
    </div> 
{% endblock %} 

views.py

from django.shortcuts import render, get_object_or_404 
from blog.models import Post 

#def index(request): 
    # get the blog posts that are published 
# posts = Post.objects.filter(published=True) 

# # Order the content by descending id, (3 2 1) 
# posts = Post.objects.order_by('-id') 
    # now return the rendered template 
# return render(request,'blog/index.html', {'posts': posts}) 

#def post(request, slug): 
    # get the Post object 
# post = get_object_or_404(Post, slug=slug) 
    # now return the rendered template 
# return render(request, 'blog/post.html', {'post': post}) 

class Index(ListView): 
    model = Post 
    template_name = 'blog/index.html' 
    def get_queryset(self): 
     return super(Index, self).get_queryset().filter(published=True).order_by('-id') 

def PostDetailView(DetailView): 
    model = Post 
    template_name = 'blog/post.html' 

urls.py

from django.conf.urls import patterns, include, url 
from django.contrib import admin 
from django.views.generic import DetailView 

admin.autodiscover() 

urlpatterns = patterns('', 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^$','blog.views.index'), 
    url(r'^(?P<slug>[\w\-]+)/$','blog.views.post'), 

    url(r'^(?P<pk>\d+)$', DetailView.as_view(
          model=Post, 
          template_name="post.html")), 
) 

post.html

{% extends 'base.html' %} 


{% block title %} Roadcase WebApp {% endblock %} 
{% block content %} 
    <h1>Roadcase WebApp</h1> 
    <p>Today's Date: {% now "F j, Y" %}</p> 
    <div class="post"> 
     <table class="main"> 
      <tr class="title_head"> 
       <td><a href="">ID</a></td> 
       <td><a href="">Roadcase</a></td> 
       <td><a href="">User</a></td> 
       <td><a href="">Location</a></td> 
       <td><a href="">Date Taken</a></td> 
       <td><a href="">Return Date</a></td> 
       <td><a href="">Returned</a></td> 
      </tr> 
      <tr> 
       <td><a class="n_link" href="/blog/{{post.id}} ">{{post.id}}</a></td> 
       <td>{{post.Roadcase_Number}}</td> 
       <td>{{post.First_Name}} {{post.Last_Name}}</td> 
       <td>{{post.Where_Did_It_Go}}</td> 
       <td>{{post.Date_Taken|date}}</td> 
       <td>{{post.Date_Returned|date}}</td> 
       <td>{% if post.Returned == True %} 
         Yes 
        {% else %} 
         No 
        {% endif %}</td> 
      </tr> 
    </table> 
    </div> 
{% endblock %} 

回答

0

你有urls.py 错误需要增加进口后,引起的DetailView以此为模型

from blog.models import Post 
+0

感谢这个技巧,但是我现在只是得到一个404错误,当我尝试去具体页面。例如,试图访问这个页面“http://127.0.0.1:8000/blog/1”给我错误,说它无法找到。有任何想法吗? – Kidex94

+0

尝试更改网址(r'^(?P \ d +)$'to url(r'^ blog /(?P \ d +)$' – arturex

+0

因此,我尝试了这一步,现在我得到TemplateDoesNot存在/ blog/1 – Kidex94

0

我会做的是:在你的看法

。潘岳:

from django.shortcuts import render, get_object_or_404 
from django.views.generic import DetailView, ListView 
from blog.models import Post 

class Index(ListView): 
    model = Post 
    template_name = 'blog/index.html' 
    def get_queryset(self) 
     return super(Index, self).get_queryset().filter(published=True).order_by('-id') 

def PostDetailView(DetailView): 
    model = Post 
    template_name = 'blog/post.html' 
项目中的urls.py

from django.conf.urls import patterns, include, url 
from django.contrib import admin 

admin.autodiscover() 

urlpatterns = patterns('', 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^blog/',include("blog.urls")), 

) 

在您的博客应用urls.py:

from blog.views import PostDetailView, Index 

urlpatterns = patterns('', 
    url(r'^$',Index.as_view()), 
    url(r'^post/(?P<slug>[\w-]+)/$',PostDetailView.as_view()), 

    url(r'^post/(?P<pk>\d+)$', PostDetailView.as_view()), 
) 

编辑 增加进口

+0

使用这个,当我尝试加载时”http://127.0.0.1:8000“我只是得到一个“ImportError at /”然后是“No model named url” – Kidex94

+0

好吧,我有一个错字,它是'urls',我也省略了一些输入。请给我看你的Post模型 – lalo

+0

好吧,是的,刚刚注意到并且已经修复它现在我正在得到一个有些事情的错误与“url(r'^ $',Index.as_view())”在博客应用程序urls.py中相关联。我得到一个“名称错误在/”“名称索引未定义” – Kidex94

相关问题