【发布时间】: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 是的,谢谢,已编辑但不是问题