#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
Как это работает:
urlparse
анализирует домен в кортеж с именем из 6 элементов.- Второй элемент кортежа (
parsed_url[1]
) представляет собой строку, содержащую часть URL-адреса сетевого местоположения (например"www.google.com"
) - Разделите строку на составные части с помощью
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 %}