inclusion_tag 模板中的 Django get_absolute_url 问题

Django get_absolute_url in inclusion_tag Issue in Template

我得到的错误是:

NoReverseMatch at / Reverse for 'view_page' not found. 'view_page' is
not a valid view function or pattern name.

基本上,我的应用程序有一个模板标签,用于在每个页面上显示导航菜单,它是动态的,因此我无法对 link 进行硬编码。我写了一个包含标签和模板:

from django import template
from ..models import Page

register = template.Library()

@register.inclusion_tag("tags/page_links.html")
def page_links():
    all_pages = Page.objects.all()
    return {'pages': all_pages}

以及templates/tags目录中的模板标签html:

<ul>
  {% for page in pages %}
  <li><a href="{{ page.get_absolute_url }}">{{ page.link_name }}</a></li>
  {% endfor %}
</ul>

每个页面对象都有一个@permalink get_absolute_url() 函数来获取link。这在网站的其他部分工作正常,但这个包含标签没有。我在我的 base.html 文件中这样使用它(因此我不必将它添加到每个页面):

{% load static %}
{% load page_tags %}

...

    <p><b>Navigation:</b></p>
    {% page_links %}

...

但页面似乎在使用模板标签中的 view_page 视图(否则有效)时遇到问题。我在这里错过了什么?

编辑:添加了 URL 和模型代码

urls.py:

from django.contrib import admin
from django.urls import path, include
from django.conf.urls import url

from .views import index, view_page

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls')),
    url(r'^$', index),
    url(r'^(?P<slug>[^\.]+).html', view_page),
]

模特:

class Page(SortableMixin):
    title = models.CharField(max_length=80, unique=True)
    slug = models.SlugField(max_length=80, unique=True)
    link_name = models.CharField(max_length=40, unique=True)
    passthrough_page = models.BooleanField(default=False)
    passthrough_link = models.CharField(max_length=40, default=None, null=True)
    content = models.TextField(default=None, null=True)

    class Meta:
        ordering = ['the_order']

    the_order = models.PositiveIntegerField(default=0, editable=False, db_index=True)

    @permalink
    def get_absolute_url(self):
        if not self.passthrough_page:
            return 'view_page', None, {'slug': self.slug}
        else:
            return self.passthrough_link

@permalink(我被告知已弃用)到直接调用 reverse 的更改似乎已经成功:

型号代码中:

    def get_absolute_url(self):
        if not self.passthrough_page:
            return reverse('view_page', kwargs={'slug': self.slug})
        else:
            return self.passthrough_link