我的任务是在我的网站的主页上创建两个列表,列出我的帖子 和第二个列表类别属于我的帖子。 我创建并且工作正常,我创建帖子详细信息连接并再次正常工作。 但我不能工作类别详细信息,如果我想看到我的帖子中属于特定类别的列表我不能显示我找不到错误页面。
我的代码
我的模特
class Category(models.Model):
categorytitle =models.CharField(max_length=1,choices=CAT_CHOICES,unique=True)
slug= models.SlugField()
class Posts(models.Model):
Title = models.CharField(max_length=100,blank=True)
slug= models.SlugField()
category = models.ManyToManyField(Category)
我的观点类别
def view_category(request, slug):
category = get_object_or_404(Category, slug=slug)
return render_to_response('blog/view_category.html', {
'category': category,
'posts': Posts.objects.filter(category=category)
})
我的网址类别
url(r'^(?P<slug>[^\.]+)/$', views.view_category, name='view_category'),
主模板标签
{% for category in categories %}
<li><a href="{{ category.slug }}">{{ category.categorytitle }}</a></li>
{% endfor %}
错误消息
找不到页面(404) 请求方法: 得到 请求网址: http://127.0.0.1:8000/category1/ 提出者: blog.views.view_post 没有帖子与给定的查询匹配。
我的观点
def view_post(request, slug):
return render_to_response('blog/movies_details.html', {
'post': get_object_or_404(Movies,slug=slug)
})
我的网址视图
url(r'^(?P<slug>[^\.]+)/$', views.view_post, name='view_post'),
答案 0 :(得分:0)
将urls.py中的正则表达式更改为:
url(r'^(?P<slug>[\w-]+)/$', views.view_category, name='view_category'),
\w
=字母数字符号+下划线
-
=连字符
(这些字符现在允许在slug中)
将Post过滤器更改为:
Posts.objects.filter(category_id=category.id)
帖子过滤必须在渲染之前放置,而不是放在其中(以“类别”的方式进行)
如何在Category模型中创建slug?在管理员?通过prepopulated_fields手动或自动?因为我不喜欢categorytitle
max_length=1
字段
醇>
答案 1 :(得分:0)
如果您的错误消息显示:&#34;提出者:blog.views.view_post&#34;显然django会在你的视图中点击view_post函数而不是view_category。 由于函数调用错误,view_post无法找到slug:&#34; category1&#34;所以给出了404错误(显然!!)。 因此,我建议检查是否存在引起此问题的网址不匹配。
答案 2 :(得分:0)
所以我遇到了类似的问题,通过阅读各种解决方案尽我所能,没有一个是有帮助的。我的解决方案真的很有趣(具有讽刺意味),因为我花了一个小时来找出问题所在。
在urls.py中,网址的顺序非常重要。
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^', include('shop.urls')),
url(r'^shpcart/', include('shpcart.urls')),
]
以上模式一直说404 shpcart /未找到,但shpcart已经存在。
正如我即将发现自己试图说服电脑一样,我将shpcart url 1行移到上方,一切都开始响起。如果有人像我一样被卡住了,希望这有帮助
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^shpcart/', include('shpcart.urls')),
url(r'^', include('shop.urls')),
]