反转 'edit' 没有找到任何参数.尝试了 1 个模式:['articles/edit/(?P<pk>[0-9]+)/$'] [英] Reverse for 'edit' with no arguments not found. 1 pattern(s) tried: ['articles/edit/(?P<pk>[0-9]+)/$']

查看:19
本文介绍了反转 'edit' 没有找到任何参数.尝试了 1 个模式:['articles/edit/(?P<pk>[0-9]+)/$']的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是 Django 的初学者,现在我正在开发一个博客应用程序.在文章编辑部分,我被卡住了,我不知道为什么它会显示此错误.搜索了很多,找不到答案

NoReverseMatch at/articles/edit/2/反转 'edit' 没有找到任何参数.尝试了 1 个模式:['articles/edit/(?P<pk>[0-9]+)/$']

中的

edit_articles 部分

views.py

@login_required(login_url="/accounts/login/")def edit_articles(请求,pk):文章 = get_object_or_404(文章,id=pk)如果 request.method == 'POST':form = forms.CreateArticle(request.POST, instance=article)如果 form.is_valid():post = form.save(commit=False)post.author = request.userpost.save()返回重定向('文章:我的文章')别的:form = forms.CreateArticle(实例=文章)返回渲染(请求,'articles/article_edit.html',{'form':form})

article_edit.html

{% extends 'base_layout.html' %}{% 块内容 %}<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">编辑文章</h1>

<div class="row"><div class="col-md-6"><div class="form-group">{{ form.title }}

<div class="col-md-6"><div class="form-group">{{ form.slug }}

<div class="col-md-6"><div class="form-group">{{ form.thumb }}

<div class="col-md-12"><div class="form-group">{{ form.body }}

<button type="submit" class="btn btn-primary btn-lg btn-block">更新</button>

</表单>

{% endblock %}

urls.py

from django.urls 导入路径从 .导入视图app_name = '文章'网址模式 = [path('', views.article_list, name='list'),path('create/', views.article_create, name='create'),path('edit//', views.edit_articles, name='edit'),path('myarticles/',views.my_articles, name='myarticles'),path('/', views.article_detail, name='details'),]

my_articles.html

第4个按钮触发主键编辑功能,重定向到编辑页面

{% 如果文章 %}{% 为文章中的文章 %}<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>{% 结束为 %}</tr>{% 别的 %}<tr><td colspan=4 class="text-center text-danger">糟糕!!您没有任何文章.</td></tr>{% 万一 %}

解决方案

在你的模板 article_edit.html - post url 需要一个 pk,你需要传递一个 pk,就像你为模板 my_articles.html 做的一样

>

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

这样 django 就知道你在编辑哪篇文章

I am a beginner in Django and now i am developing a blogging application. At the article editing section i got stucked and I dont know why its showing this error. Searched a lot and cant find an answer

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 section in

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

That button in 4th is triggering the edit function with primary key and redirects to edit page

<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 %}

解决方案

In your template article_edit.html - post url is expecting a pk, you need to pass a pk just like you are doing it for template 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 %}...

This way django knows which article you are editing

这篇关于反转 'edit' 没有找到任何参数.尝试了 1 个模式:['articles/edit/(?P&lt;pk&gt;[0-9]+)/$']的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
其他开发最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆