#python-3.x #django
Вопрос:
У меня есть список свойств в представлении и шаблоне. В шаблоне у меня есть кнопка редактирования и кнопка удаления. Ни один из них не работает, но один и тот же код из разных проектов работает просто отлично. Они не выдают никаких ошибок отладки ни в проводнике, ни на уровне журнала. Он принимает щелчок/ввод, переходит по нужному URL-адресу, но остается на странице «rei_properties».
Я использую фреймворк Django 3.1.6…
просмотр, чтобы просмотреть все записи в модели «Свойство» :
def rei_properties(request):
props = Property.objects.all()
return render(request, 'rei/rei_properties.html', {'props': props})
шаблон с/ редактированием/удалением ссылок:
<table>
<tr>
<th>Address</th>
<th>City</th>
<th>State</th>
<th>Zipcode</th>
<th colspan=2>Actions</th>
</tr>
{% for prop in props %}
<tr>
<td>{{ prop.address }}</a></td>
<td>{{ prop.city }}</a></td>
<td>{{ prop.state }}</a></td>
<td>{{ prop.zipcode }}</a></td>
<td>
<a href="{% url 'rei_properties' %}edit/{{ prop.pk }}/">Edit</a>
</td>
<td>
<a href="{% url 'rei_properties' %}del/{{ prop.pk }}/" onclick="return confirm('Are you sure you want to delete this?')">Delete</a>
</td>
</tr>
{% endfor %}
</table>
Мои URL-адреса:
url(r'^rei_properties/', views.rei_properties, name='rei_properties'),
url(r'^rei_properties/edit/(?P<pk>[0-9]{1,10})/
и, наконец, мои представления удаления и редактирования:
def rei_properties_edit(request, pk):
prop = get_object_or_404(Property, pk=pk)
if request.method == 'POST':
form = PropertyForm(request.POST, instance=prop)
if form.is_valid():
prop = form.save(commit=False)
prop.save()
return redirect('rei_properties')
else:
form = PropertyForm(instance=prop)
return render(request, 'rei/rei_properties_edit.html', {'form': form})
def rei_properties_del(request, pk):
Property.objects.get(pk=pk).delete()
return redirect('rei_properties')
Ответ №1:
менять ,
<td>
<a href="{% url 'rei_properties' %}edit/{{ prop.pk }}/">Edit</a>
</td>
<td>
<a href="{% url 'rei_properties' %}del/{{ prop.pk }}/" onclick="return confirm('Are you sure you want to delete this?')">Delete</a>
</td>
Для
<td>
<a href="{% url 'rei_properties_edit' prop.pk %}">Edit</a>
</td>
<td>
<a href="{% url 'rei_properties_del' prop.pk %}" onclick="return confirm('Are you sure you want to delete this?')">Delete</a>
</td>
Атрибут имени URL-адреса используется для прямой связи вызова из шаблона, а не для создания формата URL-адреса...
ДОБАВЛЕНО, я бы посоветовал вам назвать свое приложение в urls.py как ,
urls.py
from django.urls import path,include
from . import views
app_name = 'your_app_name'
urlpatterns = [
path('', views.home , name = "your_url_name"),
]
и из шаблонов вы можете ссылаться на конкретный URL-адрес конкретного приложения, потому что в разных приложениях может быть одно и то же имя URL-адреса... Нравится ,
<td>
<a href="{% url 'rei_properties' %}edit/{{ prop.pk }}/">Edit</a>
</td>
<td>
<a href="{% url 'your_app_name:your_url_name' %}del/{{ prop.pk }}/" onclick="return confirm('Are you sure you want to delete this?')">Delete</a>
</td>
Комментарии:
1. Еще одна проблема заключается в том , что у OP есть шаблон
^rei_properties/
, который также будет соответствовать шаблону^rei_properties/edit/(?P<pk>[0-9]{1,10})/$
и удалению, потому что он не заканчивается на a$
, поэтому первое представление будет использоваться для всех 3 URL-адресов.2. Удаление объекта должно выполняться с помощью запроса POST или запроса на УДАЛЕНИЕ, а не запроса GEt.
3. Это было потому, что я не добавил
$
в конце^rei_properties/
URL-адреса.
, views.rei_properties_edit, name='rei_properties_edit'),
url(r'^rei_properties/del/(?P<pk>[0-9]{1,10})/и, наконец, мои представления удаления и редактирования:
Ответ №1:
менять ,
Для
Атрибут имени URL-адреса используется для прямой связи вызова из шаблона, а не для создания формата URL-адреса...
ДОБАВЛЕНО, я бы посоветовал вам назвать свое приложение в urls.py как ,
urls.py
и из шаблонов вы можете ссылаться на конкретный URL-адрес конкретного приложения, потому что в разных приложениях может быть одно и то же имя URL-адреса... Нравится ,
Комментарии:
1. Еще одна проблема заключается в том , что у OP есть шаблон
^rei_properties/
, который также будет соответствовать шаблону^rei_properties/edit/(?P<pk>[0-9]{1,10})/$
и удалению, потому что он не заканчивается на a$
, поэтому первое представление будет использоваться для всех 3 URL-адресов.2. Удаление объекта должно выполняться с помощью запроса POST или запроса на УДАЛЕНИЕ, а не запроса GEt.
3. Это было потому, что я не добавил
$
в конце^rei_properties/
URL-адреса.
, views.rei_properties_del, name='rei_properties_del'),
и, наконец, мои представления удаления и редактирования:
Ответ №1:
менять ,
Для
Атрибут имени URL-адреса используется для прямой связи вызова из шаблона, а не для создания формата URL-адреса…
ДОБАВЛЕНО, я бы посоветовал вам назвать свое приложение в urls.py как ,
urls.py
и из шаблонов вы можете ссылаться на конкретный URL-адрес конкретного приложения, потому что в разных приложениях может быть одно и то же имя URL-адреса… Нравится ,
Комментарии:
1. Еще одна проблема заключается в том , что у OP есть шаблон
^rei_properties/
, который также будет соответствовать шаблону^rei_properties/edit/(?P<pk>[0-9]{1,10})/$
и удалению, потому что он не заканчивается на a$
, поэтому первое представление будет использоваться для всех 3 URL-адресов.2. Удаление объекта должно выполняться с помощью запроса POST или запроса на УДАЛЕНИЕ, а не запроса GEt.
3. Это было потому, что я не добавил
$
в конце^rei_properties/
URL-адреса.