【问题标题】:Django - Reverse with special characterDjango - 用特殊字符反转
【发布时间】:2015-05-01 03:55:21
【问题描述】:

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

使用参数 '()' 和关键字参数 '{'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 "

【问题讨论】:

  • 这并不能解决您的问题 - 但 URI 只能包含 ASCII 字符(请参阅RFC-2396
  • @BurhanKhalid:不相关的 IRI 可以包含非 ascii 字符(请参阅 rfc 3987)。常见应用是IDNA
  • 你是对的,但就 django 而言,你仍然需要对其进行 URL 编码(对 IDN 的支持将在 1.8 中推出)。

标签: python django django-templates django-urls


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      • 1970-01-01
      • 2011-05-30
      • 1970-01-01
      相关资源
      最近更新 更多