在旧的Django 1.8(对不起...)站点中,我有以下内容:
url(r"^racing/(?P<type>(dog|horse|pigeon))/", include("racing.urls")),
提取赛车网址:
urlpatterns = patterns("racing.views",
url(r"^(?P<season>\d+)/$", "season_view", name="season_home"),
}
view函数为type参数定义默认值:
def season_view(request, season, type="horse")
在我看来,这意味着我应该能够(在模板中)这样做:
{% url "season_home" season=nav.season.year %}
但是它抛出一个错误:
Reverse for 'season_home' with arguments '()' and keyword arguments '{u'season': 2019L}' not found. 1 pattern(s) tried: [u'racing/(?P<type>[-\\w]+)/(?P<season>\\d+)/$']
我想念什么?
答案 0 :(得分:1)
您的网址格式需要传递2个变量:type
和season
:
因此,您只传递season
,而没有传递type
。
尝试添加以下类型:
{% url "season_home" type=my_type season=nav.season.year %}
其中my_type
是您的类型变量。
答案 1 :(得分:0)
我可以看到您在视图中使用默认参数。因此,您期望如果不通过模板传递type
参数,则默认情况下type
会设置为horse
。
一切都很好,但是在您的主要网址格式中,您需要能够匹配未传递任何参数的规则。您可以尝试以下操作:
url(r"^/", include("racing.urls")),
url(r"^racing/(?P<type>(dog|horse|pigeon))/", include("racing.urls")),
此配置可帮助您捕获是否提供type
参数的两种情况。