我如何 update/delete Django 中的内容?
how do I update/delete a content in Django?
所以我在 Django 中有一个表单可以让用户写他们的日记。
现在我想添加编辑按钮和删除按钮,但我遇到了错误。所以这是代码。
模板(detail.html)
...
<form method='post' class="form-group">
{% csrf_token %}
<div class="row justify-content-center">
<a href="{% url 'delete' authuser_id slug %}">
<button class='btn btn-primary button-delete'>Delete</button>
</a>
</div>
</form>
urls.py
...
urlpatterns = [
...
path('detail/<int:authuser_id>/<slug:slug>', views.detail, name='detail'),
path('detail/<int:authuser_id>/<slug:slug>', views.delete, name='delete'),
]
views.py
from .models import DiaryInput
...
def detail(request, authuser_id, slug):
todayDiary = DiaryInput.objects.get(slug=slug)
return render(request, '/detail.html', {'todayDiary' : todayDiary})
def delete(request, authuser_id, slug):
todayDiary = DiaryInput.objects.get(slug=slug)
todayDiary.delete()
return redirect('/')
当我转到特定日记的详细信息页面时,我收到一条错误消息:
对 'delete' 进行反转,未找到参数“(”,)'。尝试了 1 种模式:['detail/detail/(?P[0-9]+)/(?P[-a-zA-Z0-9_]+)/delete$']
我认为我的模板在 {% url %}
标记中有问题,但我看不出我做错了什么。感谢您的帮助:)
views.py
def add(request):
if request.method == 'POST':
form = EditEntryForm(data=request.POST)
if form.is_valid():
form.save()
return redirect('home')
else:
form = AddEntryForm()
return render(request, '/add.html', {'form':form})
def update(request, id):
entry = get_object_or_404(Entry, id=id)
if request.method == 'POST':
form = EditEntryForm(data=request.POST, instance=entry)
if form.is_valid():
form.save()
return redirect('home')
else:
form = EditEntryForm(instance=entry)
return render(request, '/edit.html', {'form':form})
def delete(request, id, slug):
Entry.objects.filter(id=id, slug=slug).delete()
return redirect('home')
urls.py
path('add_entry/', views.add, name='add'),
path('update/<int:id>/', views.update, name='update'),
path('delete/<int:id>/<slug:slug>/', views.delete, name='delete'),
<a href="{% url 'detail' todayDiary.authuser_id todayDiary.slug %}">{{ entry.title }}</a>
<a href="{% url 'update' todayDiary.authuser_id %}">Update</a>
<a href="{% url 'delete' todayDiary.authuser_id todayDiary.slug %}">Delete</a>
并将模板中的表单呈现为 {{ form.as_p }} 并且最好将路径分开以获取详细信息并删除,不要混淆它。
希望这有帮助。
您为 url detail
和 delete
指定了相同的路径,因此请更改:
path('detail/<int:authuser_id>/<slug:slug>', views.detail, name='detail'),
path('delete/<int:authuser_id>/<slug:slug>', views.delete, name='delete'),
现在在模板中
<a href="{% url 'delete' todayDiary.id todayDiary.slug %}">
所以我在 Django 中有一个表单可以让用户写他们的日记。
现在我想添加编辑按钮和删除按钮,但我遇到了错误。所以这是代码。
模板(detail.html)
...
<form method='post' class="form-group">
{% csrf_token %}
<div class="row justify-content-center">
<a href="{% url 'delete' authuser_id slug %}">
<button class='btn btn-primary button-delete'>Delete</button>
</a>
</div>
</form>
urls.py
...
urlpatterns = [
...
path('detail/<int:authuser_id>/<slug:slug>', views.detail, name='detail'),
path('detail/<int:authuser_id>/<slug:slug>', views.delete, name='delete'),
]
views.py
from .models import DiaryInput
...
def detail(request, authuser_id, slug):
todayDiary = DiaryInput.objects.get(slug=slug)
return render(request, '/detail.html', {'todayDiary' : todayDiary})
def delete(request, authuser_id, slug):
todayDiary = DiaryInput.objects.get(slug=slug)
todayDiary.delete()
return redirect('/')
当我转到特定日记的详细信息页面时,我收到一条错误消息:
对 'delete' 进行反转,未找到参数“(”,)'。尝试了 1 种模式:['detail/detail/(?P[0-9]+)/(?P[-a-zA-Z0-9_]+)/delete$']
我认为我的模板在 {% url %}
标记中有问题,但我看不出我做错了什么。感谢您的帮助:)
views.py
def add(request):
if request.method == 'POST':
form = EditEntryForm(data=request.POST)
if form.is_valid():
form.save()
return redirect('home')
else:
form = AddEntryForm()
return render(request, '/add.html', {'form':form})
def update(request, id):
entry = get_object_or_404(Entry, id=id)
if request.method == 'POST':
form = EditEntryForm(data=request.POST, instance=entry)
if form.is_valid():
form.save()
return redirect('home')
else:
form = EditEntryForm(instance=entry)
return render(request, '/edit.html', {'form':form})
def delete(request, id, slug):
Entry.objects.filter(id=id, slug=slug).delete()
return redirect('home')
urls.py
path('add_entry/', views.add, name='add'),
path('update/<int:id>/', views.update, name='update'),
path('delete/<int:id>/<slug:slug>/', views.delete, name='delete'),
<a href="{% url 'detail' todayDiary.authuser_id todayDiary.slug %}">{{ entry.title }}</a>
<a href="{% url 'update' todayDiary.authuser_id %}">Update</a>
<a href="{% url 'delete' todayDiary.authuser_id todayDiary.slug %}">Delete</a>
并将模板中的表单呈现为 {{ form.as_p }} 并且最好将路径分开以获取详细信息并删除,不要混淆它。 希望这有帮助。
您为 url detail
和 delete
指定了相同的路径,因此请更改:
path('detail/<int:authuser_id>/<slug:slug>', views.detail, name='detail'),
path('delete/<int:authuser_id>/<slug:slug>', views.delete, name='delete'),
现在在模板中
<a href="{% url 'delete' todayDiary.id todayDiary.slug %}">