【发布时间】:2017-12-16 18:13:50
【问题描述】:
我得到的错误是:
NoReverseMatch at / Reverse for 'view_page' not found. 'view_page' is not a valid view function or pattern name.
基本上,我的应用程序有一个模板标签,用于在每个页面上显示导航菜单,这是动态的,因此我无法对链接进行硬编码。我写了一个包含标签和模板:
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() 函数来获取链接。这在网站的其他部分工作得很好,但这个包含标签却不行。我在我的 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
【问题讨论】:
-
您需要显示您的网址和页面
get_absolute_url方法。 -
另外,您使用的是什么版本的 Django?永久链接在 1.11 中已弃用。
-
感谢您的回复 - 上面添加的代码,django 版本是 2.0。我将尝试将反向添加到
get_absolute_url代码中,看看是否可以解决问题。 -
似乎是
reverse与@permalink的问题 - 当我在get_absolute_url函数中将其更改为reverse调用时,一切正常。感谢您的帮助!
标签: python django templatetags