reverse_lazy 与 kwargs 不匹配
reverse_lazy not matching with kwargs
我有一个 Django CreateView,它应该重定向到一个 URL,在查询字符串中有一个 UUID:
@method_decorator(xframe_options_exempt, name='dispatch')
class ActivityCreateView(CreateView):
template_name = 'embedded/activities/create.html'
form_class = ActivityCreateUpdateForm
def get_success_url(self):
return reverse_lazy('embedded:activity_status', kwargs={'unieke_code': self.object.access_link})
然而,这给出了熟悉的错误:
Reverse for 'activity_status' with arguments '()' and keyword arguments '{'unieke_code': UUID('470e3a5f-6f52-414e-a431-bf5c6e68509a')}' not found. 1 pattern(s) tried: ['embedded/activiteiten/status/']
奇怪的是,它显然找到了模式,但仍然不匹配。这是我的 urls.py:
urlpatterns = [
url(r'^activiteiten/$', views.ActivitiesIndexView.as_view(), name='activities_index'),
url(r'^activiteiten/aanmelden/$', views.ActivityCreateView.as_view(), name='activity_create'),
url(r'^activiteiten/status/', views.ActivityStatusView.as_view(), name='activity_status'),
]
奇怪的是,当我去 mysite.com/embedded/activiteiten/status/?unieke_code=470e3a5f-6f52-414e-a431-bf5c6e68509a
时它确实有效。
reverse 和 reverse_lazy 函数不适用于传递 GET 参数。这就是它失败的原因。
像这样的东西应该可以工作:
url = reverse_lazy('embedded:activity_status')
params = urlencode({'unieke_code': self.object.access_link})
return '{0}?{1}'.format(url, params)
旁注:在 Python 2 中,您应该从 urllib 导入 urlencode,在 Python 3 中,它在 urllib.parse
中
我有一个 Django CreateView,它应该重定向到一个 URL,在查询字符串中有一个 UUID:
@method_decorator(xframe_options_exempt, name='dispatch')
class ActivityCreateView(CreateView):
template_name = 'embedded/activities/create.html'
form_class = ActivityCreateUpdateForm
def get_success_url(self):
return reverse_lazy('embedded:activity_status', kwargs={'unieke_code': self.object.access_link})
然而,这给出了熟悉的错误:
Reverse for 'activity_status' with arguments '()' and keyword arguments '{'unieke_code': UUID('470e3a5f-6f52-414e-a431-bf5c6e68509a')}' not found. 1 pattern(s) tried: ['embedded/activiteiten/status/']
奇怪的是,它显然找到了模式,但仍然不匹配。这是我的 urls.py:
urlpatterns = [
url(r'^activiteiten/$', views.ActivitiesIndexView.as_view(), name='activities_index'),
url(r'^activiteiten/aanmelden/$', views.ActivityCreateView.as_view(), name='activity_create'),
url(r'^activiteiten/status/', views.ActivityStatusView.as_view(), name='activity_status'),
]
奇怪的是,当我去 mysite.com/embedded/activiteiten/status/?unieke_code=470e3a5f-6f52-414e-a431-bf5c6e68509a
时它确实有效。
reverse 和 reverse_lazy 函数不适用于传递 GET 参数。这就是它失败的原因。
像这样的东西应该可以工作:
url = reverse_lazy('embedded:activity_status')
params = urlencode({'unieke_code': self.object.access_link})
return '{0}?{1}'.format(url, params)
旁注:在 Python 2 中,您应该从 urllib 导入 urlencode,在 Python 3 中,它在 urllib.parse
中