Попытка отредактировать сообщение: обратный для ‘edit’ с аргументами ‘(«,)’ не найден. 1 шаблон (ы) попробован: [‘users/(?P[^/] )/edit/(?P[0-9] )$’]

#django #django-models #django-forms #django-views

#django #django-модели #django-forms #django-просмотры

Вопрос:

Я пытаюсь отредактировать вопрос с помощью тега, который ссылается на мою функцию edit_post в моем views.py . Я думаю, проблема в том, что я не передал контекст в правильное представление для его отображения, но я не уверен, как это исправить. Получение этой ошибки — обратный для ‘edit’ с аргументами ‘(«,)’ не найден. 1 шаблон (ы) попробован: [‘users/(?P[^/] )/edit/(?P[0-9] )$’]

Views.py

 @login_required(login_url='sign_in')
def dashboard(request, *args, **kwargs):

    username = request.user.username

    filtered_questions = Question.objects.filter(user_id=username)

    context = {
    'filtered_questions': filtered_questions,
    }

    return render(request, 'users/dashboard.html', context)

def edit_post(request, pk):
    question = Question.objects.get(pk=pk)
    if rerquest.method == 'POST':
        form = QuestionForm(request.POST, instance=question)
        if form.is_valid():
            form.save()
            question.user = request.user
        
            return redirect('/')
        else:
            form = QuestionForm(instance=question) 
    else:
        form = QuestionForm(instance=question)

    context = {
        'form': form,
        'question': question,
    }

    return render(request, 'users/edit_question.html', context)
  

Urls.py

 urlpatterns = [
    path('<username>', views.dashboard, name='dashboard'),
    path('<username>/upload', views.upload, name='upload'),
    path('<username>/edit/<int:pk>', views.edit_post, name='edit')
]
  

Шаблон с кнопкой редактирования вопроса

 <a href="{% url 'edit' question.pk %}">
  

Редактировать:

 context = {
    'filtered_questions': filtered_questions,
    'username':username,
}
  

Попытался передать имя пользователя в качестве контекстной переменной и отобразить его в шаблоне следующим образом

  <a href="{% url 'edit' username question.pk %}">
  

Ответ №1:

Вы также должны указать имя пользователя для url соответствия:

 <a href="{% url 'edit' username=user.username pk=question.pk %}">
  

Вам не нужно передавать username из контекста, если вы передаете request.user.username . Потому что user всегда доступен с аутентифицированной страницы из шаблона.

Комментарии:

1. Даже после добавления имени пользователя сообщение об ошибке сохраняется. Нужно ли мне передавать эту переменную имени пользователя через контекст?

2. Да … передайте имя пользователя из контекста и поместите его перед question.pk

3. Хорошо, спасибо, что помогло! Тем не менее, я все еще не понимаю, как я должен получить правильный question.pk . Если я не могу получить к этому доступ до просмотра edit_post, как я должен передать это в свой шаблон в «dashboard»?

4. Извините, я не смог понять, о чем вы спрашиваете. Пожалуйста, объясните немного.

5. Я пытаюсь получить доступ к «question.pk » в моем шаблоне панели мониторинга, но я не передаю переменную контекста вопроса, пока не будет нажат элемент, который запускает edit_post.