Django-找不到包含的URL模式的反向

时间:2019-03-14 08:37:14

标签: django

在旧的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+)/$']

我想念什么?

2 个答案:

答案 0 :(得分:1)

您的网址格式需要传递2个变量:typeseason: 因此,您只传递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参数的两种情况。