Django url模式为不同的货币

时间:2014-01-16 04:07:35

标签: django caching seo django-templates django-urls

我正在建立一个英文网站,只想提供一小部分货币。对于SEO和缓存,我计划开发以下网址结构,价格以相关货币显示。

主页(S)

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

分类索引页

  • site.com/categories /
  • 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 /
  • ...

这是我尝试过的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")),
)

这是我在base.html中需要的那种动态网址

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

我的问题是双重的(我认为) 首先,我不能允许默认情况下,即网址模式中的site.com(/),以便有一个可以在网站的每个版本中动态使用的公共网址名称。

其次,即使忽略默认情况,我也会收到以下错误:

请求方法:GET 请求网址:site.com/au/ Django版本:1.5.4 异常类型:NoReverseMatch 例外价值:
使用参数'()'和找不到关键字参数'{}来反转'home'。

任何帮助都会非常感激,因为这是我在Django的第一个项目。干杯

1 个答案:

答案 0 :(得分:0)

第一个问题是你的正则表达式。 []表示字符类,即[a|bc]将匹配a|bc,但绝不会bc

因此,您的正则表达式应该使用群组()

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

如果你对正则表达式没有100%的信心,那么你应该看看优秀的surlex库,它提供了一个用于编写URL模式的简洁DSL。

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