将{%url%}与参数中的unicode字符一起使用(Django)

时间:2018-08-03 16:55:15

标签: python django unicode django-templates django-views

我有一个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参数的链接?

1 个答案:

答案 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'),
]