0

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

我错过了什么?

4

2 回答 2

1

您的 url 模式需要传递 2 个变量:typeseason: 所以您只传递season.type

尝试添加如下类型:

{% url "season_home" type=my_type season=nav.season.year %}

my_type你的类型变量在哪里。

于 2019-03-14T08:40:24.807 回答
0

我可以看到您在视图中使用默认参数。因此,您期望如果您没有通过type模板传递参数,则将type其设置horse为默认值。

一切都很好,但是在您的主要 url 模式中,您需要能够匹配没有传递参数的规则。您可以尝试以下方法:

url(r"^/", include("racing.urls")),
url(r"^racing/(?P<type>(dog|horse|pigeon))/", include("racing.urls")),

此配置可帮助您在是否提供type参数时捕获这两种情况。

于 2019-03-14T09:20:51.780 回答