Реверс для 'edit' без аргументов не найден. Попробован 1 шаблон (ов): ['Articles / Edit / (? P <pk>[0-9] +) / $'] - PullRequest
0 голосов
/ 01 сентября 2018

Я новичок в Django, и сейчас я занимаюсь разработкой блогового приложения. В разделе редактирования статьи я застрял, и я не знаю, почему он показывает эту ошибку. Много искал и не могу найти ответ

NoReverseMatch at /articles/edit/2/

Reverse for 'edit' with no arguments not found. 1 pattern(s) tried: ['articles/edit/(?P<pk>[0-9]+)/$']

раздел edit_articles в

views.py

@login_required(login_url="/accounts/login/")
def edit_articles(request, pk):
    article = get_object_or_404(Article, id=pk)
    if request.method == 'POST':
        form = forms.CreateArticle(request.POST, instance=article)
        if form.is_valid():
            post = form.save(commit=False)
            post.author = request.user
            post.save()
            return redirect('articles:myarticles')
    else:
        form = forms.CreateArticle(instance=article)
    return render(request, 'articles/article_edit.html', {'form': form})

article_edit.html

{% extends 'base_layout.html' %}

{% block content %}
<div class="create-article">
  <form class="site-form" action="{% url 'articles:edit' %}" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <div class="jumbotron">
      <div class="heading col-md-12 text-center">
        <h1 class="b-heading">Edit Article</h1>
      </div>
      <div class="row">
        <div class="col-md-6">
          <div class="form-group">
            {{ form.title }}
          </div>
        </div>
        <div class="col-md-6">
          <div class="form-group">
            {{ form.slug }}
          </div>
        </div>
        <div class="col-md-6">
          <div class="form-group">
            {{ form.thumb }}
          </div>
        </div>
        <div class="col-md-12">
          <div class="form-group">
            {{ form.body }}
          </div>
        </div>
      </div>
      <button type="submit" class="btn btn-primary btn-lg btn-block">Update</button>
    </div>
  </form>
</div>

{% endblock %}

urls.py

from django.urls import path
from . import views

app_name = 'articles'

urlpatterns = [
    path('', views.article_list, name='list'),
    path('create/', views.article_create, name='create'),
    path('edit/<int:pk>/', views.edit_articles, name='edit'),
    path('myarticles/',views.my_articles, name='myarticles'),
    path('<slug>/', views.article_detail, name='details'),
]

my_articles.html

Эта кнопка в 4-ом вызывает функцию редактирования с первичным ключом и перенаправляет на страницу редактирования

<tbody>
{% if articles %}
{% for article in articles %}
<tr class="table-active">
  <th scope="row">1</th>
  <td>{{ article.title }}</td>
  <td>{{ article.date }}</td>
  <td><a href="{% url 'articles:edit' pk=article.pk %}"><button type="button" class="btn btn-info">Edit</button></a></td>
{% endfor %}
</tr>
{% else %}
<tr>
  <td colspan=4 class="text-center text-danger">Oops!! You dont have any articles.</td>
</tr>
{% endif %}

1 Ответ

0 голосов
/ 01 сентября 2018

В вашем шаблоне article_edit.html - в URL-адресе сообщения ожидается pk, вам нужно передать pk точно так же, как вы делаете это для шаблона my_articles.html

<div class="create-article"><form class="site-form" action="{% url 'articles:edit' pk=form.instance.pk %}" method="post" enctype="multipart/form-data">{% csrf_token %}...

Таким образом, django знает, какую статью вы редактируете

...