【发布时间】:2020-09-04 10:13:23
【问题描述】:
所以是时候问我第一个愚蠢的问题了。
有两个简单相同的测试:
def test_home_page_status_code(self):
response = self.client.get('/en/')
self.assertEquals(response.status_code, 200)
def test_view_url_by_name(self):
response = self.client.get(reverse('web:home'))
self.assertEquals(response.status_code, 200)
有两个简单的 url 配置:
...
urlpatterns = i18n_patterns(
path('', include('web.urls', namespace='web')),
)
...
...
app_name = 'web'
urlpatterns = [
path('', views.HomePageView.as_view(), name='home'),
]
...
而且模板中有一段代码:
{% for lang_code, lang_name in languages %}
{% language lang_code %}
<a class="dropdown-item" href="{% url request.resolver_match.view_name %}">{{ lang_name }}</a>
{% endlanguage %}
{% endfor %}
如果我评论模板中的代码,两个测试都会通过;如果我留下代码,反向测试就会失败。
raise NoReverseMatch(msg)
django.urls.exceptions.NoReverseMatch: Reverse for '' not found. '' is not a valid view function or pattern name.
我做错了什么?或者我必须反向传递什么参数才能通过测试?
【问题讨论】:
-
这是您传递的网址。
{% url request.resolver_match.view_name %}这不是给定上下文的有效 url。用你需要的合适的来改变它。 -
@DenizKaplan 如果运行 selenium 测试,此模板显示正确且链接正确。
-
你的 urlconf 的命名空间是什么?
-
@Harben url_resolver.namespace_dict.keys() dict_keys(['debug_toolbar', 'social', 'ranking', 'partners', 'card', 'profiles', 'cocktails', 'blog ', '网络', '管理员'])
-
@Harben 还是我误解了这个问题?
标签: django django-templates django-testing django-i18n