Django - 具有特殊字符的反转

Django - Reverse with special character

当我想反向使用带有特殊字符的参数时,出现此错误:

使用参数“()”和关键字参数“{'namep': u'\xe9 \xe9 \xe9 sds ( \xe9zacd '}' not found. 1 pattern( s) 试过:['(?P\w+)$']

我的看法:

def createPro(request):
    ...
    if form.is_valid() :
        name = form.cleaned_data["name"]
        return redirect(reverse(my_pro, kwargs={'namep': name}))

def my_pro(request,namep):
    pro = Pro.objects.get(name=namep)
    ...

我的模板:

...
<form method="POST" action="{% url 'createPro' %}" class="form-signin">
    {% csrf_token %}

    <div class="row">
        <div class="col-md-offset-3 col-md-3">
                {{ form.name|bootstrap }}
        </div>
...

我的URL:

url(r'^create-pro$', 'createPro', name='createPro'),
url(r'^(?P<namep>\w+)$','my_pro', name="mypro"),

当方法 "createPro" 中的变量 "name" 包含特殊字符时出现此错误。对于这个例子,name = "é é é sds ( ézacd "

你似乎想在你的代码中包含 unicode 字符 url。试试这个:how to have unicode characters in django url?

您的测试用例是 name = "é é é sds ( ézacd ",而视图的正则表达式是 url(r'^(?P<namep>\w+)$'' '(\w 不匹配,因此正则表达式不匹配。尝试使用 "ééésdsézacd",或更新您的正则表达式以允许名称中包含您想允许的字符。

代码审查显示 Django URL 解析器使用 re.UNICODE 标志,所以我希望 'é' 等匹配 \w.