【问题标题】:Django NoReverseMatch and Blank PageDjango NoReverseMatch 和空白页
【发布时间】:2013-06-04 14:54:31
【问题描述】:

我正在使用 Django 1.4.5。

当我通过管理员页面访问进入的详细信息时,我得到一个错误

“NoReverseMatch at /admin/r/12/1/”:“详细信息”的反向 参数 '()' 和关键字参数 '{'category': u'category', 'slug': u'entry-test'}' 未找到

并且在访问首页的条目详情(/category/entry-test/)时得到nothing/blank page

如果我想通过子类别(/category/subcategory/entry-test/)访问条目详细信息,模型和 URLname 模式的权利是什么?

型号sn-p:

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})

查看sn-p:

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))

网址 sn-p:

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'),

模板sn-p:

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>

我可能做错了什么? 如果有人可以提供帮助,我将不胜感激!请帮帮我。

【问题讨论】:

    标签: django django-templates django-views


    【解决方案1】:

    您的 url 关键字参数是 category_idslug_id,但您在 get_absolute_url 方法中传递了 categoryslug。这个版本应该可以工作:

     @models.permalink
        def get_absolute_url(self):
            return ('entry.views.detail',
                    (), {'category_id': self.category.slug, 'slug_id': self.slug})
    

    还可以考虑重命名参数。 id 通常是数字,slug 是字母数字。

    对于您的空白页问题(来自您的评论):

    您的 URL /category/entry-test/ - 如果您粘贴在问题中的 sn-p 在您的主要 urls.py 中,这将映射到您的详细视图。如果您没有匹配的结果(.filter() 调用没有结果),您将看到一个“空白”页面,因为 &lt;ul&gt; 将没有任何 li 元素。

    如果在您的主要urls.py 中,您有类似url('^category/', include(some.other.urls)) 的内容,那么该URL 将映射到您的list 视图,并且您遇到同样的问题-.filter() 没有返回任何结果,因此您会看到一个“空白”页面。

    【讨论】:

      【解决方案2】:

      我在详细模板上犯的小错误:

      <ul>
         {% for entry in entry %}
         <li>
            <a href="{{ entry.get_absolute_url }}">{{ entry.title }}</a>
            <br />
            {{ entry.description }}
         </li>
         {% endfor %}
      </ul>
      

      问题已经解决了。

      【讨论】:

        猜你喜欢
        • 2019-10-13
        • 2011-10-14
        • 2014-09-18
        • 2019-12-17
        • 2018-11-15
        • 1970-01-01
        • 2019-02-26
        • 2011-08-11
        • 2013-03-22
        相关资源
        最近更新 更多