Подтвердить что ты не робот

Нужно преобразовать строку в int в шаблон django


Я пытаюсь передать параметры url в шаблон django, подобный этому...

response = render_to_string('persistConTemplate.html', request.GET)

Это вызывающая строка из моего файла views.py. persistConTemplate.html - это имя моего шаблона и request.GET - это словарь, содержащий параметры URL.

В шаблоне я пытаюсь использовать один из параметров, подобных этому...

{% for item in (numItems) %}

  item {{item}}

{% endfor %}

numItems - это один из параметров URL-адреса, который я отправляю в свой запрос следующим образом:

http:/someDomain/persistentConTest.html/?numItems=12

Когда я пытаюсь использовать цикл for выше, я получаю вывод вроде этого....

изображение 1 изображение 2

Я ожидаю и хотел бы, чтобы текстовое изображение было напечатано 12 раз...

изображение 1 изображение 2 изображение 3 изображение 4 изображение 5 изображение 6 изображение 7 изображение 8 изображение 9 изображение 10 изображение 11 изображение 12

Кто-нибудь может рассказать мне, что я ошибаюсь?

4b9b3361

Ответ 1

Да, место для этого находится в представлении.

Мне кажется, что приведенный выше пример не будет работать - вы не можете перебирать целое число.

numItems = request.GET.get('numItems')

if numItems:
   numItems = range(1, int(numItems)+1)

return direct_to_template(request, "mytemplate.html", {'numItems': numItems})


{% for item in numItems %}
 {{ item }}
{% endfor %}

Ответ 2

вы можете принудить str к int, используя фильтр добавления

{% for item in numItems|add:"0" %}

https://docs.djangoproject.com/en/dev/ref/templates/builtins/#add

чтобы принудить int к str просто использовать slugify

{{ some_int|slugify }}

EDIT: я сказал, что согласен с другими, что обычно вы должны делать это в представлении - используйте эти трюки только тогда, когда альтернативы намного хуже.

Ответ 3

Мне нравится создавать настраиваемый фильтр:

# templatetags/tag_library.py

from django import template

register = template.Library()

@register.filter()
def to_int(value):
    return int(value)

Использование:

{% load tag_library %}
{{ value|to_int }}

Это относится к случаям, когда это невозможно сделать легко.

Ответ 4

Вы должны добавить код в свое представление, чтобы распаковать параметры GET и преобразовать их в нужные значения. Даже если numItems было целым числом, синтаксис, который вы показываете, не даст вам нужного вам результата.

Попробуйте следующее:

ctx = dict(request.GET)
ctx['numItems'] = int(ctx['numItems'])
response = render_to_string('persistConTemplate.html', ctx)

Ответ 5

Мое решение - это своего рода хак и очень специфический.

В шаблоне я хочу сравнить процент с 0.9, и он никогда не достигает 1, но все значения считаются строкой в ​​шаблоне и не могут преобразовать строку в float.

Итак, я сделал это:

{% if "0.9" in value %}
...
{% else %}
...
{% endif %}

Если я хочу определить, что какое-то значение больше 0,8, я должен сделать:

{% if ("0.9" in value) or ("0.8" in value) %}
...
{% else %}
...
{% endif %}

Это взломать, но в моем случае этого достаточно. Надеюсь, это поможет другим.