2014-01-16 36 views
0

我正在建立一個英文網站,只是想提供一小部分貨幣。對於搜索引擎優化和緩存,我計劃開發以相關貨幣顯示價格的以下網址結構。不同貨幣的Django網址格式

首頁(S)

  • site.com/
  • site.com/au/
  • site.com/us/
  • ...

分類指數Pages

  • site.co M /分類/
  • site.com/au/categories/
  • site.com/us/categories/
  • ...

產品索引頁

  • site.com/categories/category1/
  • site.com/au/categories/category1/
  • site.com/us/categories/category1/
  • ...

產品頁數

  • site.com/categories/category1/product-1/
  • site.com/au/categories/category1/product-1/
  • site.com/us/categories/category1/product-1/
  • ...

這是我的一個ttempted url.py

urlpatterns = patterns('', 
    #url(r'^$', views.homeCurrency, {'cur_slug': '' }, name='home'), 
    url(r'^(?P<cur_slug>[:au|nz|us|eu|ca|uk]+)/$', views.homeCurrency, name='home'), 
    url(r'^categories/', include('parts.urls', namespace="parts")), 
    url(r'^(?P<cur_slug>[:au|nz|us|eu|ca|uk]+)/bike-parts/', include('parts.urls', namespace="parts")), 
) 

這是哪門子的動態URL我需要在我base.html文件

<a href="{% url 'home' %}">Home</a> 

我的問題是雙重的(我認爲) 首先,我不能允許默認情況下,即site.com(/)在url模式中,這樣就可以在網站的每個版本中動態使用公用的url名稱。

其次,即使忽略默認的情況下,我收到以下錯誤:

請求方法:GET 請求URL:site.com/au/ Django的版本:1.5.4 異常類型:NoReverseMatch 異常值:
未找到參數'()'和關鍵字參數'{}'的'home'反向。

任何幫助將不勝感激,因爲這是我在Django的第一個項目。乾杯

回答

0

第一個問題是你的正則表達式。 []表示字符類別,即[a|bc]將匹配a,|,bc但從不bc

因此,您的正則表達式應該使用組()

url(r'^(?P<cur_slug>au|nz|us|eu|ca|uk)/$', views.homeCurrency, name='home'), 

如果你不自信的正則表達式100%,你應該看看進入優異surlex庫,它提供了一個整潔的小的DSL編寫URL模式。

from surlex.dj import surl 

// a macro for valid currencies 
surlex.register_macro('$', r'au|nz|us|eu|ca|uk') 

urlpatterns = patterns('', 
    // macros are only used in match groups (surrounded with `<>`) 
    surl(r'<cur_slug:$>/$', views.homeCurrency, name='home'), 
    surl(r'<cur_slug:$>/bike-parts/$', include('parts.urls', namespace="parts")), 
) 

關於您選擇的「動態網址」,爲什麼不把您的網址根據語言環境,並根據語言環境選擇正確的貨幣。 REF

+0

謝謝托馬斯,我最初看着語言環境功能,但認爲它可能是矯枉過正。我將如何使用區域設置功能去創建上面所需的url結構的url模式,以及將會帶來哪些好處?再次感謝 – talkterps

+0

另外,文檔也這樣說:「i18n_patterns()只允許在你的根URLconf中使用,在包含的URLconf中使用它會引發一個錯誤配置的異常。」這會導致任何問題,因爲我包括parts.urls? – talkterps

+0

使用內置i18n框架的好處是,除了本地化定價之外,您還可以使用它來提供本地化內容。另外,像django-cms這樣的大型django項目也會自然地融入其中。 – Thomas