2014-01-16 37 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