簡體   English   中英

將Django url模板標記與可選參數一起使用時出現NoReverseMatch錯誤,但在瀏覽器中訪問URL時則不是

[英]NoReverseMatch error when using Django url template tag with optional parameters, but NOT when visiting the URL in the browser

我有一個URL需要考慮以下模式:

  • 本地主機:8000 /人員配備,機構
  • localhost:8000 / staffing-agencies / 90210(郵政編碼)
  • localhost:8000 /人員代理機構/波特蘭 - 或(城邦)

當我在瀏覽器中輸入任何這些網址時,它們都按預期工作。 但是,當我嘗試從Django的url模板標記引用此URL時,我收到NoReverseMatch錯誤。

這是我的相關url.py文件:

# From urls.py
urlpatterns = patterns('',
    url(r'^', include('bos.apps.search.urls', namespace='search',
                       app_name='search')),
)

# From search/urls.py
urlpatterns = patterns('bos.apps.search',
    url(r'^staffing-agencies/'
        r'((?P<city>[a-zA-Z]+)-(?P<state>[a-zA-Z]{2}))?'
        r'((?P<zip>[0-9]{5}))?$',
        'views.main', name='main'),
)

我認為它可能與可選參數有關,但所有這些差異都會引發NoReverseMatch錯誤:

<a href="{% url "search:main" zip=97214 %}">Test</a>
<a href="{% url "search:main" city="portland" state="or" %}">Test</a>

這種差異不會引發錯誤:

<a href="{% url "search:main" %}">Test</a>

我正在使用Django 1.6.5

這不是更好的解決方案,這是解決方案之一

url(r'^staffing-agencies/(?P<city>[a-zA-Z]+)*-(?P<state>[a-zA-Z]{2})*?(?P<zip>[0-9]{5})*?$',
        'views.main', name='main'),

在觀點中:

def main(request, city=None, state=None, zip=None):

在HTML中:

<a href="{% url "search:main"  city='sadasd' state='ds' zip=12345 %}">Test</a>

在這種情況下,url像這樣工作,

  • 本地主機:8000 /人員配備,機構
  • localhost:8000 / staffing-agencies / -90210(郵政編碼)
  • localhost:8000 /人員代理機構/波特蘭 - 或(城邦)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM