Как вставить переменные результаты в вызовы на языке шаблонов Django

В 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» здесь не решается в нужное время — есть совет?

Спасибо

сканирование

Я не понимаю, как должен выглядеть сгенерированный URL. Можете ли вы показать соответствующий URL-шаблон?

Daniel Roseman 28.05.2019 11:43

Измените {{ object.object_name }} это на object.object_name и попробуйте.

shaik moeed 28.05.2019 11:44

Я сделал это изменение, и оно стало лучше, но оно заставило меня понять, что большая проблема заключается в разрешении «url». Я отредактировал вопрос, чтобы отразить его (и показать соответствующий URL-адрес)

Omroth 28.05.2019 12:09
view_do_confirm_action узор более интересный. Кстати, зачем вам нужно/хотите еще раз нажать на бэкэнд для подтверждения?
Ivan Starostin 28.05.2019 12:09

вы не можете использовать {% url %} внутри {% url %}. Вы можете создать переменную {% url view_delete_object object.object_name as delete_url %}, а затем использовать delete_url во втором {% url %}

dirkgroten 28.05.2019 12:09

Но вы не показали шаблон для view_do_confirm_action, а это то, что нам нужно увидеть.

Daniel Roseman 28.05.2019 13:05
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
6
70
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам не нужно помещать другое выражение в выражение шаблона 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 28.05.2019 12:10

@dirkgroten спасибо. Я сделал ту же ошибку, что и вопрошающий, лол. Сейчас выглядит нормально?

xxbinxx 28.05.2019 12:11

Это очень близко, но я получаю обратную ошибку, потому что (я думаю) в the_url есть косая черта. Я пытался поместить '' вокруг url view_delete_object object.object_name, но это не разрешилось... и поместить '' вокруг the_url в href просто перенаправляет строку 'the_url'

Omroth 28.05.2019 12:39

@Omroth, можете ли вы опубликовать свой URL-адрес django. Дайте мне посмотреть, как это выглядит.

xxbinxx 28.05.2019 13:07

path('objects/object/<str:object_name>/delete', views_objects.view_delete_object, name='view_delete_object'),

Omroth 28.05.2019 13:21

@ Омрот и твой view_do_confirm_action путь?

xxbinxx 28.05.2019 13:41

@Omroth, пожалуйста, опубликуйте и другой путь. возможно, лучше сделать это с помощью пользовательских тегов шаблона.

xxbinxx 28.05.2019 15:00

Извините, ребята, большое спасибо за помощь: path('confirm/<str:url_text>', views.view_do_confirm_action, name='view_do_confirm_action'),

Omroth 28.05.2019 16:09

@ Омрот, ты прав, проблема в / в URL. /confirm/<url_text>/delete не разрешится должным образом.

xxbinxx 29.05.2019 09:36

Я бы предпочел отправить {% url 'views_whatever' arg %}, но не могу решить эту проблему.

Omroth 29.05.2019 11:29

@Omroth, проверьте другой ответ, он должен помочь вам. Текущий ответ может помочь кому-то в будущем, поэтому я не оставляю его таким, какой он есть, и поэтому я опубликовал еще один.

xxbinxx 29.05.2019 11:35
Ответ принят как подходящий

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>

Другие вопросы по теме