Моя функция перенаправления Django не работает

#python #django

#python #django

Вопрос:

Я разрабатываю веб-приложение и, похоже, не могу выполнить свое представление, которое я использовал в методе перенаправления. Кто-нибудь может мне с этим помочь?

Вот мой views.py

 @login_required
def view_task_description(request):
    if request.method == 'POST':
        task_description = GetTaskDescription(data=request.POST, user=request.user)
        if task_description.is_valid():
            obj = GetTaskDescription.get_task_description(task_description)
            return redirect('get_task_description', pk=obj[0].pk)
            # return render(request, 'todoapp/task_desc.html', context={'description': obj[0].description})
    return render(request, 'todoapp/select_task_description.html', context={'view_tasks': GetTaskDescription(user=request.user)})


@login_required
def get_task_description(request, pk):
    # print "Reached get task descrition method"
    obj = get_object_or_404(Task, pk=pk)
    return render(request, 'todoapp/task_desc.html', context={'description': obj.description})
  

Вот мои URL:

 url(r'^view_task_description', views.view_task_description, name='view_task_description'),
url(r'^view_task_description/(?P<pk>[0-9] )/$', views.get_task_description, name="get_task_description"),
  

Вот мой forms.py:

 class GetTaskDescription(forms.Form):

    get_tasks = forms.ModelMultipleChoiceField(
        queryset=Task.objects.none(),
        widget=forms.CheckboxSelectMultiple,
        required=True
    )

    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user')
        super(GetTaskDescription, self).__init__(*args, **kwargs)
        self.fields['get_tasks'].queryset = self.user.task_set.all()

    def get_task_description(self):
        tasks = self.cleaned_data['get_tasks']
        return tasks
  

Ответ №1:

Вам нужно добавить $ к первому регулярному выражению, иначе оно будет соответствовать /view_task_description/5/ так же хорошо, как /view_task_description .

 url(r'^view_task_description/$', views.view_task_description, name='view_task_description'),
url(r'^view_task_description/(?P<pk>[0-9] )/$', views.get_task_description, name="get_task_description"),
  

Я также добавил косую черту в конце, чтобы соответствовать обычному стилю Django и вашему другому шаблону URL.