【问题标题】:Reverse for 'edit_post' with arguments '('',)' not found. 1 pattern(s) tried: ['edit_post/(?P<blog_id>\\d+)/$']未找到带有参数 '('',)' 的 'edit_post' 的反向操作。尝试了 1 种模式:['edit_post/(?P<blog_id>\\d+)/$']
【发布时间】:2019-02-28 15:36:34
【问题描述】:

enter image description herethe blog_post.html 工作正常,直到传递“编辑帖子”链接,生成上面的错误,另一方面,如果我从 url 模式和“blog. id”来自“编辑帖子”链接,但相应地,当我单击“编辑帖子”链接并打开edit_post.html页面时会出现另一个错误,它需要缺少(edit_post)参数,如果我再次重新传递参数,那么url 模式不匹配。

from django.conf.urls import url

from . import views

app_name = 'blogs'

urlpatterns = [
    #index
    url(r'^$',views.index,name='index'),

    #make page for blogposts
    url(r'^blogposts/$',views.blogposts,name='blog_post'),

    #page for making a new post
    url(r'^new_post/$',views.make_post,name='add_post'),

    #page for editing post
    url(r'^edit_post//(?P<blog_id>\d+)$', views.edit_post, name = 'edit_post'),
]

the view page
    from django.shortcuts import render
from django.urls import reverse
from django.http import HttpResponseRedirect
from .models import BlogPost
from .forms import BlogPostForm
def edit_post(request,blog_id):
    post = BlogPost.objects.get(id=blog_id)

    if request.method != 'POST':
        form = BlogPostForm(instance = post)
    else:
        form = BlogPostForm(instance = post, data =request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('blogs:blog_post'))
    context = {'post':post,'form':form}
    return render(request,'blogy/edit_post.html',context)



the page of the posts
 {% extends "blogy/base.html" %}

{% block content %}
<p>The Posts:</p>
<ul>
    {% for blog in blogs %}
        <li>
            <p>{{ blog.date_added|date:'M d, Y H:i' }}</p>
            <p>{{ blog.text|linebreaks }}</p>
            <p>
                <a href = "{% url 'blogs:edit_post' %}">edit post</a>
            </p>
        </li>
        {% empty %}
        <li>no posts !</li>
    {% endfor %}
</ul>
<a href="{% url 'blogs:add_post' %}">Add a new Post</a>
{% endblock content %}


the page where the edit post link goes
    {% extends "blogy/base.html" %}

{% block content %}
<p>Edit Post:</p>
<form action = "{% url 'blogs:edit_post' blog.id %}" method = 'post'>
    {% csrf_token %}
    {{ form.as_p }}
    <button name='submit'>Save Changes</button>
</form>
{% endblock content %}

【问题讨论】:

  • 你有双斜杠登录编辑帖子网址。
  • 错误告诉您您正在为 blog_id 值传递一个空字符串。您需要显示生成该链接的模板以及相关视图。
  • 能否请您显示您**反向** url 的文件?
  • @DevangPadhiar 这里是其余代码
  • @SergeyPugach 是的,谢谢,已编辑但不是问题

标签: python django


【解决方案1】:

问题是您的 url 正在等待您传递 blog_id 变量,但您什么也没传递。 这里添加blog.id

<a href = "{% url 'blogs:edit_post' blog_id=blog.id %}">edit post</a>

【讨论】:

  • 是的,刚刚做到了,又来了,,,,,,,,, 'edit_post' 的反向,没有找到参数'('',)'。尝试了 1 种模式:['edit_post/(?P\\d+)$'] 并且如果 url 标签中没有传递任何参数,它会带来这个 ,,,,,,,,Reverse for 'edit_post'没有找不到参数。尝试了 1 种模式:['edit_post/(?P\\d+)$']
  • 尝试传递命名参数blog_id。请参阅编辑后的答案。
  • 对不起,但还是一样...... 'edit_post' 反向搜索关键字参数'{'blog_id': ''}' 未找到。尝试了 1 种模式:['edit_post/(?P\\d+)$']
  • 你在哪个网址添加它?是for 在博客上循环时循环的那个吗?
  • 是的,整个 url 标签都在循环中,我在上面的描述中放了一张图片,在从 url 标签中删除参数并删除这个 ""/(?P\d+)"" 也来自 url 模式,但如果我点击“编辑帖子”链接,它将声称视图中的 edit_post 函数缺少一个参数 (blog_id)
【解决方案2】:

好的,我意识到了问题,它应该是(post.id)而不是(blog.id),因为视图函数中的变量名称是从字典“context”渲染到html页面的名称是“帖子”而不是“博客”

【讨论】:

    猜你喜欢
    • 2018-11-21
    • 2021-03-26
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    • 2020-11-05
    • 2023-03-28
    • 2021-04-24
    相关资源
    最近更新 更多