我有一个Django网站,可以在其中单击帖子的标签(我使用标签),以查看所有使用该标签的帖子的列表。它工作正常,除非字符串是unicode。具体来说,正是这行模板给我一个错误:
<a href="{% url 'fortykwords:tag' tag.name %}">{{ tag.name }}</a>
这给了我错误
Reverse for 'tag' with arguments '('你好',)' not found. 1 pattern(s) tried: ['tag\\/(?P<input_tag>[-a-zA-Z0-9_]+)$']
这是urls.py:
path('tag/<slug:input_tag>', views.tag_view, name='tag'),
这是views.py中的视图:
def tag_view(request, input_tag):
latest_post_list = Post.objects.filter(tags=input_tag,
status__exact="published")
context = {'latest_post_list': latest_post_list, 'page_tag': input_tag}
return render(request, 'fortykwords/tag.html', context)
我应该更改些什么,以便可以反向链接带有unicode参数的链接?
答案 0 :(得分:1)
尝试使用模式\w+
而不是[-a-zA-Z0-9_]+
。
为此,您需要将path
更改为re_path
,以对URL使用自己的自定义正则表达式。
示例:
from django.urls import path, re_path
urlpatterns = [
# your regular paths
path('...'),
# update to `re_path` for those which can accept unicode letters
url(r'tag/(?P<input_tag>\w+)$', views.tag_view, name='tag'),
]