#python #django
#python #django
Вопрос:
В настоящее время я работаю над веб-сайтом, где вы можете создать список покупок. Я пытаюсь вставить элементы в список покупок. Таким образом, такие вещи, как банан, торт и т.д., попадут в список покупок. У меня все заработало. Когда я создаю элемент, он попадает внутрь базы данных, но когда я пытаюсь перенаправить обратно на веб-сайт, где я нажал создать элемент, отображается ошибка
Обратный для ‘detail’ с аргументами ключевого слова ‘{‘pk’: 1}’ не найден. Попробовано 1 шаблон (ы): [‘shoplist/(?P<item_id>[0-9] )/$’]
Кроме того, когда я пытаюсь войти на страницу моих сведений, отображается ошибка
Обратный для ‘createitem’ с аргументами ‘(«,)’ не найден. Попробовано 1 шаблон (ы): [‘список покупок/(?P<item_id>[0-9] )/createitem/ $’]
Я думаю, что я сделал что-то не так при создании своих путей или сделал что-то неправильное с точки зрения синтаксиса. Ничто из того, что я нашел в Интернете, не исправляет это. Есть ли способ исправить эту проблему? Большое вам спасибо!
views.py
def createitem(request, item_id):
if request.method == 'GET':
return render(request, 'shoplist/createitem.html', {'form':ItemForm(), 'id':item_id})
else:
form = ItemForm(request.POST)
itemlist = form.save(commit=False)
itemlist.shoplist = Shoplist.objects.filter(user=request.user, pk=item_id).first()
itemlist.user = request.user
itemlist.save()
return redirect('detail', pk=item_id)
urls.py
from django.contrib import admin
from django.urls import path
from shoplist import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.home, name='home'),
#authentication
path('signup/', views.usersignup, name='usersignup'),
path('logout/', views.userlogout, name='userlogout'),
path('login/', views.userlogin, name='userlogin'),
path('create/', views.createlist, name='createlist'),
path('shoplist/', views.currentshoplist, name='currentshoplist'),
path('shoplist/<int:item_id>/', views.detail, name='detail'),
path('shoplist/<int:item_id>/createitem/', views.createitem, name='createitem'),
]
detail.html
{% extends 'shoplist/base.html' %}
{% block content %}
<h2>{{ error }}</h2>
<h1>{{ shopitems }}</h1>
{% for i in item %}
{{i.item}}
{% endfor %}
<form action="{% url 'createitem' item_id %}" method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Create Item</button>
</form>
{% endblock %}
Ответ №1:
Вы хотите перенаправить на 'detail'
представление, а аргумент, необходимый для этого, находится item_id
в виде int. Я думаю, вы хотите redirect('detail', item_id=item_id)
. Однако вы, вероятно, захотите получить созданное pk
из формы… Возможно form.instance.pk
? Итак redirect('detail', item_id=form.instance.pk)
. Неясно, предназначена ли эта форма для сохранения того же типа объекта, который вы просматриваете в представлении «подробности».
Для {% url %}
я не думаю, что вы можете использовать что-либо, кроме аргументов ключевых слов. Итак, {% url 'createitem' item_id=item_id %}
если вы поместите item_id
в контекст шаблона.
Комментарии:
1. перенаправление (‘detail’, item_id=item_id) сработало, спасибо! Как бы я направил на createitem.html в разделе формы detail.html ? Я думаю, что мне также нужно передать идентификатор элемента для этого, но я не могу понять синтаксис для этого
2. А, я понял это! Мне пришлось отобразить item_id в словаре внутри функции detail! Спасибо за помощь!
3. … отредактировал ответ, но, я думаю, вы сами разобрались с этой частью. приветствия!