好吧,我的 django 站点中的发布按钮有问题.它没有执行其功能



我使用django 3.0.3、python 3.8.5和Vs代码作为IDE。我正在单击"发布"按钮,但它不起作用。

---型号.py-

def publish(self):
self.published_data = timezone.now()
self.save()

---视图.py-

@login_required
def post_publish(request,pk):
post = get_object_or_404(Post,pk=pk)
post.publish()
return redirect('post_detail',pk=pk)

---urls.py-

path('post/<int:pk>/publish/',views.post_publish,name ='post_publish'),

--post_detail.html(模板(--

<a class="btn btn-primary" href="{% url 'post_publish' pk=post.pk %}">Publish</a>

--post_detail.html(完整模板(--

{% extends "blog/base.html" %}
{% block content %}
<h1 class="posttitle loader">{{post.title}}</h1>
{% if post.published_date %}
<div class="date postdate">
{{ post.published_date}}
</div>
{% else %}
<a class="btn btn-primary" href="{% url 'post_publish' pk=post.pk %}">Publish</a>
{% endif %}
<p class="postcontent">{{ post.text|safe|linebreaksbr}}</p>
{% if user.is_authenticated %}
<a class= "btn btn-primary" href="{% url 'post_edit' pk=post.pk %}">
<svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-pencil" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" d="M11.293 1.293a1 1 0 0 1 1.414 0l2 2a1 1 0 0 1 0 1.414l-9 9a1 1 0 0 1-.39.242l-3 1a1 1 0 0 1-1.266-1.265l1-3a1 1 0 0 1 .242-.391l9-9zM12 2l2 2-9 9-3 1 1-3 9-9z"/>
<path fill-rule="evenodd" d="M12.146 6.354l-2.5-2.5.708-.708 2.5 2.5-.707.708zM3 10v.5a.5.5 0 0 0 .5.5H4v.5a.5.5 0 0 0 .5.5H5v.5a.5.5 0 0 0 .5.5H6v-1.5a.5.5 0 0 0-.5-.5H5v-.5a.5.5 0 0 0-.5-.5H3z"/>
</svg>
</a>
<a class= "btn btn-primary" href="{% url 'post_remove' pk=post.pk %}">
<svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-trash" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path d="M5.5 5.5A.5.5 0 0 1 6 6v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm2.5 0a.5.5 0 0 1 .5.5v6a.5.5 0 0 1-1 0V6a.5.5 0 0 1 .5-.5zm3 .5a.5.5 0 0 0-1 0v6a.5.5 0 0 0 1 0V6z"/>
<path fill-rule="evenodd" d="M14.5 3a1 1 0 0 1-1 1H13v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V4h-.5a1 1 0 0 1-1-1V2a1 1 0 0 1 1-1H6a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1h3.5a1 1 0 0 1 1 1v1zM4.118 4L4 4.059V13a1 1 0 0 0 1 1h6a1 1 0 0 0 1-1V4.059L11.882 4H4.118zM2.5 3V2h11v1h-11z"/>
</svg>
</a>
{% endif %}
<hr>
<a class="btn btn-priamy btn-comment" href="{% url 'add_comment_to_post' pk=post.pk %}">Add Comment</a>
<div class="container">
{% for comment in post.comments.all %}
<br>
{% if user.is_authenticated or comment.apporved_comment %}
{{ comment.created_date }}
{% if not comment.approved_comment %}
<a class= "btn btn-primary" href="{% url 'comment_remove' pk=comment.pk %}">
<svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-x" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" d="M11.854 4.146a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708-.708l7-7a.5.5 0 0 1 .708 0z"/>
<path fill-rule="evenodd" d="M4.146 4.146a.5.5 0 0 0 0 .708l7 7a.5.5 0 0 0 .708-.708l-7-7a.5.5 0 0 0-.708 0z"/>
</svg>
</a>
<a class= "btn btn-primary" href="{% url 'comment_approve' pk=comment.pk %}">
<svg width="1em" height="1em" viewBox="0 0 16 16" class="bi bi-check2" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" d="M13.854 3.646a.5.5 0 0 1 0 .708l-7 7a.5.5 0 0 1-.708 0l-3.5-3.5a.5.5 0 1 1 .708-.708L6.5 10.293l6.646-6.647a.5.5 0 0 1 .708 0z"/>
</svg>
</a>
{% endif %}
<P> {{ comment.text|safe|linebreaks}}</p>
<P> Posted By:{{comment.author}}</p>
{% endif %}
{% empty %}
<p>No Comments</p>
{% endfor %} 
</div>
{% endblock  %}

我是新来的,正在学习django框架,当我坚持做一些我不知道该做什么的事情时,感觉很糟糕,但我希望你们能帮助我。任何帮助都将不胜感激谢谢

我不认为它会那样工作,我认为像这样的工作会起作用:

urls.py

path('post/publish',views.post_publish,name ='post_publish'),

forms.py

from django import forms
from .models import Post
class PostForm(forms.ModelForm):
class Meta:
model = POST
fields = ['title', 'text', ...] # Your post model fields

views.py

from .forms import PostForm
@login_required
def post_publish(request):
if request.Method=='POST':
post_form = PostForm(request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect('/post_detail/'+str(pk))
post_form = PostForm()
return render(response, "publish.html", {"form": post_form})

templatepublish.html(当然可以添加其他html以呈现您喜欢的内容(

<form method="post">
{% csrf_token %}
{{form.as_p}}
<input type="submit" value="Publish">
</form>

PostForm将自动将您的Post模型转换为表单,当您"获取"publish.html时,此表单将是,当您单击发布按钮时,它将通过Post在同一url上提交表单数据。在我们的视图中,当它是POST时,将该请求解析为一个填充的表单,然后我们调用is_valid来清理数据并确保所有验证都得到满足。如果是,那么我们调用save函数,该函数将创建帖子并重定向到帖子详细信息页面。

在实现时,您仍然可能遇到一些导入错误或其他错误,但这是为了让您了解如何做到这一点。在实现此功能时,如果遇到一些错误,请告诉我。

最新更新