Django: использование методов python

#python #django #methods

#python #django #методы

Вопрос:

Я пытаюсь обрезать свои URL-адреса, которые заполняются в таблицу html, следующим образом:

 {% for x in queryset %}
<tr> 
<td>{{x.LINK}}</td>
</tr>
  

так что, то есть ‘www.google.com «становится «google». Как этого добиться? В python это было бы просто с .split('.') помощью метода, но здесь я в замешательстве.
Или, может быть, было бы проще выполнить все изменения данных, прежде чем запрашивать их в django?

Комментарии:

1. Вы должны иметь возможность использовать практически любой допустимый Python внутри {% %} блоков

Ответ №1:

РЕДАКТИРОВАТЬ: только что заметил, что ваш пример содержит упрощенный, но искаженный URL. Этот более простой тег шаблона будет работать для URL-адресов, отформатированных следующим образом ‘www.google.com ‘:

 @register.simple_tag()
def get_domain_name_from_url(url):
    return url.split('.')[-2]
  

Если вы твердо намерены сделать это в шаблоне, вы можете создать пользовательский тег шаблона:

До тех пор, пока ваши URL-адреса правильно отформатированы (например, «https://www.google.com /»), это должно сработать:

 from django import template
register = template.Library()

from urllib.parse import urlparse

@register.simple_tag()
def get_domain_name_from_url(url):
    parsed_url = urlparse(url)
    netloc = parsed_url[1]
    domain_name = netloc.split('.')[-2]
    return domain_name
  

Как это работает:

  1. urlparse анализирует домен в кортеж с именем из 6 элементов.
  2. Второй элемент кортежа ( parsed_url[1] ) представляет собой строку, содержащую часть URL-адреса сетевого местоположения (например "www.google.com" )
  3. Разделите строку на составные части с помощью split('.') , и верните предпоследний элемент в списке ( "google" ) . Получая часть перед TLD ( .com ), мы избегаем любых проблем, которые возникают, если мы работаем с самого начала. (например, если URL не содержит www , нам понадобится первый элемент в списке, а не второй. Начиная с TLD и работая с обратными словами, мы всегда должны получать доменное имя.)

Сохраните код в файле с именем [your_django_project]/[your_app]/templatetags/get_domain_name.py .

Убедитесь, что приложение находится в вашем INSTALLED_APPS in settings.py .

Перезапустите сервер. (Не забывайте эту часть. Сервер регистрирует теги вашего шаблона при запуске.)

Теперь в вашем шаблоне вы можете загрузить код:

 {% load get_domain_name %}
{% get_domain_name_from_url x.LINK %}