В Django я пытаюсь сделать общий вызов «подтвердить действие», которому я могу легко передать конечный адрес, но мне трудно вставить переменную в ссылку:
<a href = "{% url 'view_do_confirm_action' 'url view_delete_object object.object_name' %}"> Delete this object </a><br>
Если это неясно, аргументом view_do_confirm_action является URL-адрес, по которому следует перейти, если пользователь подтвердит. Конечный URL-адрес, за которым я хотел бы следить, ссылается на этот шаблон:
path('objects/object/<str:object_name>/delete', views.view_delete_object, name='view_delete_object'),
«url view_delete_object object.object_name» здесь не решается в нужное время — есть совет?
Спасибо
сканирование
Измените {{ object.object_name }}
это на object.object_name
и попробуйте.
Я сделал это изменение, и оно стало лучше, но оно заставило меня понять, что большая проблема заключается в разрешении «url». Я отредактировал вопрос, чтобы отразить его (и показать соответствующий URL-адрес)
view_do_confirm_action
узор более интересный. Кстати, зачем вам нужно/хотите еще раз нажать на бэкэнд для подтверждения?
вы не можете использовать {% url %} внутри {% url %}. Вы можете создать переменную {% url view_delete_object object.object_name as delete_url %}
, а затем использовать delete_url
во втором {% url %}
Но вы не показали шаблон для view_do_confirm_action
, а это то, что нам нужно увидеть.
Вам не нужно помещать другое выражение в выражение шаблона django.
Вы передаете URL-адрес в качестве параметра другому URL-адресу.
Вместо
<a href = "{% url 'view_do_confirm_action' 'url view_delete_object {{ object.object_name }}' %}"> Delete this object </a><br>
Делать
{% url view_delete_object object.object_name as the_url %}
<a href = "{% url 'view_do_confirm_action' the_url %}"> Delete this object </a><br>
правильно, но без {{ }} вокруг object.object_name
@dirkgroten спасибо. Я сделал ту же ошибку, что и вопрошающий, лол. Сейчас выглядит нормально?
Это очень близко, но я получаю обратную ошибку, потому что (я думаю) в the_url есть косая черта. Я пытался поместить '' вокруг url view_delete_object object.object_name, но это не разрешилось... и поместить '' вокруг the_url в href просто перенаправляет строку 'the_url'
@Omroth, можете ли вы опубликовать свой URL-адрес django. Дайте мне посмотреть, как это выглядит.
path('objects/object/<str:object_name>/delete', views_objects.view_delete_object, name='view_delete_object'),
@ Омрот и твой view_do_confirm_action
путь?
@Omroth, пожалуйста, опубликуйте и другой путь. возможно, лучше сделать это с помощью пользовательских тегов шаблона.
Извините, ребята, большое спасибо за помощь: path('confirm/<str:url_text>', views.view_do_confirm_action, name='view_do_confirm_action'),
@ Омрот, ты прав, проблема в / в URL. /confirm/<url_text>/delete
не разрешится должным образом.
Я бы предпочел отправить {% url 'views_whatever' arg %}, но не могу решить эту проблему.
@Omroth, проверьте другой ответ, он должен помочь вам. Текущий ответ может помочь кому-то в будущем, поэтому я не оставляю его таким, какой он есть, и поэтому я опубликовал еще один.
urls.py
path('<str:object_name>/delete', ViewBarDrinkDetail, name='view_delete_object'),
path('confirm/<str:url_text>', ViewBarDrinkUpdate, name='view_do_confirm_action'),
Ваш верхний URL-адрес view_do_confirm_action
принимает url_text, этот url_text, очевидно, будет содержать /, с этими динамическими косыми чертами Django не сможет разрешить ваш view_do_confirm_action
.
Решения
Попробуйте изменить шаблон:
path('/confirm/<str:object_name>/delete', ViewBarDrinkDetail, name='view_do_confirm_action'),
Использовать пользовательский тег шаблона
@register.simple_tag
def pass_url_to_reverse_name(name, arg_url_name, arg_url_args):
arg_resolved_url = reverse(arg_url_name, args=[arg_url_args])
resolved_url = reverse(name, args=[arg_resolved_url])
return resolved_ur
В шаблоне Используйте это так:
<a href = "{% pass_url_to_reverse_name 'view_do_confirm_action' 'view_delete_object' request.user.id %}"> Delete this object </a>
Я не понимаю, как должен выглядеть сгенерированный URL. Можете ли вы показать соответствующий URL-шаблон?