我正在建立一个英文网站,只想提供一小部分货币。对于SEO和缓存,我计划开发以下网址结构,价格以相关货币显示。
主页(S)
分类索引页
产品索引页
产品页面
这是我尝试过的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的第一个项目。干杯
答案 0 :(得分:0)
第一个问题是你的正则表达式。 []
表示字符类,即[a|bc]
将匹配a
,|
,b
或c
,但绝不会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