django 与 jinja2 在模板中使用模型的 get_absolute_url 定义

django with jinja2 using model's get_absolute_url definition in template

我在 Django 1.10 中使用 jinja2 作为我的模板引擎。我有一个定义为的模型:

 def get_absolute_url(self):
        return reverse('apps.web.views.work_detail', kwargs={'year':self.created_at.year,
                                                            'month':self.created_at.strftime("%m"),
                                                            'day':self.created_at.strftime("%d"),
                                                            'slug':self.slug,
                                                           'workId':self.id})

我的 urls.py 有:

 url(r'^ardiye/çalışmalar/(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/(?P<slug>[-\w]+),(?P<workId>\d)/$', work_detail, name='work_detail')

当我使用我的模型定义通过 <a href='{{next_work.get_absolute_url() }}' class='directional-menu-prev'>Önceki</a> 在我的模板中获取绝对 url 时,我得到一个错误:

NoReverseMatch at /
Reverse for 'apps.web.views.work_detail' with arguments '()' and keyword arguments '{'year': 2016, 'slug': 'kksjs', 'month': '09', 'day': '10', 'workId': 2}' not found. 0 pattern(s) tried: [] 

你的 URL 叫做 "work_detail",而不是 "apps.web.views.work_detail"。您应该在 get_absolute_url 方法中使用该名称。

根据 reverse 函数的文档,第一个参数 "can be a URL pattern name or the callable view object"。因此,要么导入 work_detail 视图函数并将其直接传递给 reverse 函数(不带单引号),要么传递 URL 模式名称,即 'work_detail'.