【问题标题】:Weird behaviour of django dynamic urldjango 动态 url 的奇怪行为
【发布时间】:2013-11-28 14:35:13
【问题描述】:

我在 django 中使用动态 URL。它适用于整数值,如果动态部分是 URL 的结尾,则适用于字符串。当动态变量后面的 URL 中有一些其他组件时,说:

url(r'companies/(?P<comp_id>.+)/buy/?$',views.buy)

现在在 views.buy 函数中,

print comp_id 

给我id1/buy。因此,它将整个剩余的 URL 作为 comp_id 变量。我该如何阻止它?

公司.html:

<html>
    <head>
            <title>{{ company.name }}</title>
    </head>
    <body>
            Name:{{ company.name }}<br> 
            Worth: {{ company.company_worth }}<br>

            <form action="/companies/{{ company.comp_id }}/buy/" method = "post">
                    {% csrf_token %}
                    {{ form.as_p }}
                    <input type="submit" value="Buy">
            </form>

    </body>

【问题讨论】:

  • 那是不可能的;你必须有一个像companies/id1/buy/buy 这样的网址才能发生。
  • 在任何情况下,您都可以匹配[^/]+ 来匹配任何不是斜线而不是.+ 的字符。
  • @MartijnPieters:(?P&lt;comp_id&gt;[^/]+) 也不起作用
  • 您能显示其他网址吗?你有companies/... 也映射到view.buy 吗?
  • @SimeonVisser:不。只有这个 URL 被映射到 views.buy

标签: python regex django dynamic-url


【解决方案1】:
url(r'companies/(?P<comp_id>.+?)/buy(/|)$', views.buy)

【讨论】:

    【解决方案2】:

    如果comp_id 的值是id1,那么就可以了。

    url(r'companies/(?P<pdf>\w+)/buy/?$',views.buy)
    

    【讨论】:

    • 我的 id 中可能也有 _。例如)id_1
    • @AswinMurugesh:没问题。 \w 匹配字母数字字符,包括“”,与 [A-Za-z0-9] 相同
    猜你喜欢
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    • 2017-01-30
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多