【问题标题】:Error during django template renderingdjango 模板渲染期间的错误
【发布时间】:2015-11-10 12:18:23
【问题描述】:

我的models.py 文件中的一个类有这个功能

def get_absolute_url(self):
        return reverse('index', kwargs={'slug': self.slug})

views.py 函数如下:

def index(request):
    cardSets = CardSet.objects.all()
    return render(request, 'catalog/index.html', {'cardsets': cardSets})

还有来自index.html的一段代码:

{% for cardset in cardsets %}
    <a href="{{ cardset.get_absolute_url }}">
     ...

我的urls.py 文件如下所示:

urlpatterns = [url(r'^$', views.index, name='index'),
               url(r'^cardset/(?P<cardset_slug>[-\w]+)/$', views.show_cardset, name='show_cardset'),]

现在,当我尝试访问 http://127.0.0.1:8000/ 时,我收到以下错误:

在模板中 /home/dennis/PycharmProjects/eshop/templates/catalog/index.html,错误 在第 7 行

带有参数“()”和关键字参数的“索引”反向 '{'slug': u'first-one'}' 未找到。尝试了 1 种模式:['$']

第 7 行是这个位:&lt;a href="{{ cardset.get_absolute_url }}"&gt;

能否请您告诉我出了什么问题以及为什么?

【问题讨论】:

    标签: django django-models django-templates django-views


    【解决方案1】:

    更改获取绝对网址的方法;

    def get_absolute_url(self):
        return reverse('show_cardset', kwargs={'cardset_slug': self.slug})
    

    【讨论】:

    • 您必须调用卡片组详细视图,而不是索引视图。 show_cardset 是卡片详情视图的 url 名称。
    • kwargs 中将slug 重命名为cardset_slug
    • @GeoJacob 这行得通!谢谢!但是你能解释一下为什么吗?所以我们转到根页面 / -> urtls.py 将我们重定向到索引视图( url(r'^$', views.index, name='index'),) -> 这个视图呈现 index.html页。为什么它关心 cardset_slug?我可能在这里不清楚 :) 你能解释一下幕后发生的事情吗?
    • 在您的索引页面中,它会将 url 引用到卡片详细信息页面,因此它会检查卡片中提到的 url。
    猜你喜欢
    • 2017-07-03
    • 2020-11-18
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    • 2017-01-31
    • 2017-05-21
    相关资源
    最近更新 更多