2017-01-28 6 views
0

у меня есть Django CreateView, который должен перенаправлять на URL с UUID в строку запроса:reverse_lazy не соответствие с kwargs

@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 это работает.

ответ

2

Функции reverse и reverse_lazy не предназначены для передачи параметров GET. Вот почему он терпит неудачу.

Что-то, как это должно работать:

url = reverse_lazy('embedded:activity_status') 
params = urlencode({'unieke_code': self.object.access_link}) 
return '{0}?{1}'.format(url, params) 

Side Примечание: В Python 2, вы должны импортировать UrlEncode из URLLIB, а в Python 3, это в urllib.parse

+0

Спасибо! Наверное, я недостаточно читал документацию :) –

 Смежные вопросы

  • Нет связанных вопросов^_^