【问题标题】:Django url patterns for different currencies不同货币的 Django url 模式
【发布时间】:2014-02-04 20:27:47
【问题描述】:

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

家庭

  • 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 中需要的那种动态 url

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

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

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

请求方法:GET 请求网址:site.com/au/ Django 版本:1.5.4 异常类型:NoReverseMatch 异常值:
未找到带有参数“()”和关键字参数“{}”的“home”的反向操作。

任何帮助将不胜感激,因为这是我在 Django 中的第一个项目。干杯

【问题讨论】:

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


    【解决方案1】:

    第一个问题是你的正则表达式。 [] 表示字符类,即[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")),
    )
    

    关于您选择的“动态 url”,为什么不将您的 url 根基于区域设置,并根据区域设置选择正确的货币。 REF

    【讨论】:

    • 感谢 Thomas,我最初查看了语言环境功能,但认为它可能有点矫枉过正。我将如何使用语言环境功能为上述所需的 url 结构创建 url 模式,有什么好处?再次感谢
    • 此外,文档这样说:“i18n_patterns() 仅允许在您的根 URLconf 中使用。在包含的 URLconf 中使用它会引发 ImproperlyConfigured 异常。”。考虑到我包含了parts.urls,这会导致任何问题吗?
    • 使用内置 i18n 框架的好处是,除了本地化定价之外,您还可以使用它来提供本地化内容。此外,像 django-cms 这样的大型 django 项目也自然地与之集成。
    猜你喜欢
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 2017-07-01
    • 2020-09-16
    • 2015-10-24
    • 2014-04-23
    • 2018-08-20
    • 2012-01-22
    相关资源
    最近更新 更多