Python django中的注释形式为';不要保存新的评论
我为网站上的文章创建了一个新的评论表单。当我添加来自django admin的新评论时,一切正常,但当我尝试直接从细节页面添加新评论时,什么都没有发生,我正在重定向到包含文章列表的页面。 这是我的档案 models.py:Python django中的注释形式为';不要保存新的评论,python,django,Python,Django,我为网站上的文章创建了一个新的评论表单。当我添加来自django admin的新评论时,一切正常,但当我尝试直接从细节页面添加新评论时,什么都没有发生,我正在重定向到包含文章列表的页面。 这是我的档案 models.py: class Komentarz(models.Model): post = models.ForeignKey(Wpisy, related_name="komentarze", verbose_name="Komentarze do artykułu", on_de
class Komentarz(models.Model):
post = models.ForeignKey(Wpisy, related_name="komentarze", verbose_name="Komentarze do artykułu", on_delete=models.CASCADE)
name = models.CharField(max_length=80, verbose_name="Imię")
email = models.EmailField(verbose_name="Email")
content = models.TextField(verbose_name="Treść komentarza")
created_date = models.DateTimeField(verbose_name="Utworzono", auto_now_add=True)
active = models.BooleanField(verbose_name="Aktywny?", default=True)
class Meta:
ordering = ('created_date',)
verbose_name="Komentarz"
verbose_name_plural="Komentarze"
def __str__(self):
return 'Komentarz dodany przez {} dla strony {}'.format(self.name, self.post)
与细节的功能相抗衡
from django.shortcuts import render, get_object_or_404
from .models import Wpisy, Komentarz
from .forms import KomentarzeForma
....
def detale_bajki(request, slug, ):
detale_bajki = get_object_or_404(Wpisy, slug=slug)
komentarze = detale_bajki.komentarze.filter(active=True)
if request.method == 'POST':
formularz_komentarza = KomentarzeForma(data=request.POST)
if formularz_komentarza.is_valid():
nowy_komentarz = formularz_komentarza.save(commit=False)
nowy_komentarz.detale_bajki = detale_bajki
nowy_komentarz.save()
else:
formularz_komentarza = KomentarzeForma()
return render(request, 'bajki/detale_bajki.html', {'detale_bajki': detale_bajki, 'komentarze': komentarze, 'formularz_komentarza': formularz_komentarza})
forms.py
from .models import Komentarz
from django import forms
class KomentarzeForma(forms.ModelForm):
class Meta:
model = Komentarz
fields = ('name', 'email', 'content')
和detail.html
...
{% with komentarze.count as total_komentarze %}
<h2>
{{ total_komentarze }} komentarz{{ total_komentarze|pluralize:"y" }}
</h2>
{% endwith %}
{% for komentarz in komentarze %}
Komentarz dodany przez <strong>{{komentarz.name}}</strong>
{{komentarz.created_date}}
<p>
{{ komentarz.content|linebreaks }}<br>
{% empty %}
<p>Nie dodano jeszcze żadnych komentarzy</p>
{% endfor %}
{% if nowy_komentarz %}
<h2>Twój komentarz został dodany</h2>
{% else %}
<h2>Dodaj nowy komentarz</h2>
<form action="." method="post">
{{formularz_komentarza.as_p}}
{% csrf_token %}
<p><input type="submit" value="Dodaj komentarz"></p>
</form>
{% endif %}
试用:
nowy_komentarz.post = detale_bajki
...
return render(request, 'html page', {'key': 'what you want to return to your context'}) # don't fornget to add some return to your view.
您的url模式是
path('bajki/<slug>', views.detale_bajki, name='detale_bajki')
这意味着您正在提交到/bajki/
,这是错误的URL
您可以通过向url添加一个尾随斜杠(这在Django url中很常见)来修复此问题
调用
nowy\u komentarz.save()
后,您的detale\u bajki
视图未返回响应。检查缩进。请同时显示您的URL。在youdetail.html
中,表单未传递slug
,这是视图中的一个参数。detale_bajki
。我已尝试更改您的编写方式。但还是没什么:(对不起,Eliakim,但我想我不明白你的意思。它是什么意思?我正在尝试猜测解决方案。你可以使用pdb自己调试它:#在视图开始时导入pdb pdb.set_trace()看看我打赌你的表单没有通过是有效的()方法.Ok我添加了line import pdb;pdb.set_trace(),现在在控制台中我只有这个:>c:\projekty\public_python\bajki\views.py(2)(->from django.shortcuts导入渲染,获取对象或_404(pdb)。如何检查错误?当然,当我实现PDB时,localhost会停止工作。只需对每一行按“n”和“enter”,然后检查代码在哪一行中断。这只是为了可视化代码流。
path('bajki/<slug>', views.detale_bajki, name='detale_bajki')
<form action="." method="post">
path('bajki/<slug>/', views.detale_bajki, name='detale_bajki')
<form action="{% url 'detale_bajki' detale_bajki.slug %}" method="post">