Django - 具有特殊性格的反转

时间:2015-02-28 13:00:43

标签: python django django-templates django-urls

当我想要反向使用特殊字符的参数时,我有这个错误:

使用参数'()'和关键字参数'{'namep':u'\ xe9 \ xe9 \ xe9 sds(\ xe9zacd'}''找不到'l_s.views.my_pro'的反转.1个模式试过:['(?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(r'^create-pro$', 'createPro', name='createPro'),
url(r'^(?P<namep>\w+)$','my_pro', name="mypro"),

当方法“createPro”中的变量“name”包含特殊字符时,我遇到此错误。对于此示例,name =“ééésds(ézacd”

2 个答案:

答案 0 :(得分:0)

您似乎想要在您的网址中包含unicode字符。试试这个:how to have unicode characters in django url?

答案 1 :(得分:0)

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

代码审核看起来Django网址解析器使用re.UNICODE标记,因此我希望'é'等与\w匹配。