我正在使用Django 1.4.5。
当我通过管理员页面访问条目的详细信息时,我收到了错误。
“NoReverseMatch at / admin / r / 12/1 /”:反向'详细'用 参数'()'和关键字参数'{'category':u'category', 'slug':u'entry-test'}'找不到
访问前页的条目详细信息(/ category / entry-test /)时,无/空白页。
模特和权利的权利是什么? URL名称模式,如果我想通过子类别(/ category / subcategory / entry-test /)访问条目详细信息?
模型摘要:
class Entry (models.Model):
title = models.CharField()
slug = models.SlugField()
category = models.ForeignKey('entry.Category')
def __unicode__(self):
return self.title
@models.permalink
def get_absolute_url(self):
return ('entry.views.detail', (), {'category': self.category.slug, 'slug': self.slug})
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title)
return super(Entry, self).save(*args, **kwargs)
class Category(models.Model):
title = models.CharField()
slug = models.SlugField()
parent = models.ForeignKey('self', blank=True, null=True, related_name='children')
def __unicode__(self):
if self.parent:
return self.parent.title, self.title
return self.title
@permalink
def get_absolute_url(self):
return ('entry.views.category', (), {'slug': self.slug})
观看片段:
def category(request):
category = Category.objects.all()
return render_to_response('category.html', locals(), context_instance=RequestContext(request))
def list(request, slug_id):
category = get_object_or_404(Category, slug=slug_id)
list = Entry.objects.filter(category=category)
return render_to_response("list.html", locals(), context_instance=RequestContext(request))
def detail(request, category_id, slug_id):
entry = Entry.objects.filter(slug=slug_id)
category = Category.objects.filter(slug=category_id)
return render_to_response('detail.html', locals(), context_instance=RequestContext(request))
网址摘要:
urlpatterns = patterns('entry.views',
(r'^$', 'category', name='entry-category'),
url(r'^(?P<slug_id>[-\w]+)/$', 'list', name='entry-list'),
url(r'^(?P<category_id>[-\w]+)/(?P<slug_id>[-\w]+)/$', 'detail', name='entry-detail'),
模板摘录:
category.html
<ul>
{% for category in category %}
<li><a href="{{ category.slug }}">{{ category.title }}</a> ({{ category.entry_set.all.count }})</li>
{% endfor %}
</ul>
list.html
<ul>
{% for entry in list %}
<li><a href="{{ entry.slug }}">{{ entry.title }}</a></li>
{% endfor %}
</ul>
detail.html
<ul>
{% for entry in entry.category %}
<li><a href="{{ entry.category }}/{{ entry.get_absolute_url }}">{{ entry.title }}</a>
<br />{{ entry.description }}</li>
{% endfor %}
</ul>
我可能做错的地方和地点? 如果任何人可以帮助我,我会很感激!请帮帮我。
答案 0 :(得分:2)
您网址的关键字参数为category_id
和slug_id
,但您在category
方法中传递了slug
和get_absolute_url
。这个版本应该有效:
@models.permalink
def get_absolute_url(self):
return ('entry.views.detail',
(), {'category_id': self.category.slug, 'slug_id': self.slug})
另请考虑重命名您的参数。 id
通常为数字,slug
为字母数字。
对于您的空白页问题(来自您的评论):
您的网址/category/entry-test/
- 如果您在问题中粘贴的代码段位于主urls.py
中,则会映射到您的详细信息视图。如果您没有匹配的结果(.filter()
来电没有结果),您会看到一个“空白”页面,因为<ul>
不会有任何li
元素。
如果在您的主urls.py
中,您有类似url('^category/', include(some.other.urls))
的内容,则该网址会映射到您的list
视图,并且您遇到同样的问题 - .filter()
没有返回任何结果,因此您会看到一个“空白”页面。
答案 1 :(得分:0)
我对细节模板没什么错误:
<ul>
{% for entry in entry %}
<li>
<a href="{{ entry.get_absolute_url }}">{{ entry.title }}</a>
<br />
{{ entry.description }}
</li>
{% endfor %}
</ul>
问题现在解决了。