Согласно моему другому вопросу о том: Handle dynamic staticfiles path with DjangoОтображение переменного из тегов файла или context_processors в Django шаблоне
Я не найти способ решить мою проблему. Я хотел бы добавить в свой HTML-шаблон переменную, соответствующую запросу Django.
Я уже использовал теги, чтобы разрешить некоторые части в зависимости от групп пользователей.
Мой файл tags.py выглядит следующим образом:
from django import template
from django.contrib.auth.models import Group
from Configurations.models import Theme
register = template.Library()
@register.filter(name='has_group')
def has_group(user, group_name):
group = Group.objects.get(name=group_name)
return group in user.groups.all()
@register.assignment_tag
def GetTheme(Theme):
mytheme = Theme.objects.values_list('favorite_theme').last()
return mytheme
И мой шаблон HTML выглядит следующим образом:
<!DOCTYPE html>
<html>
<head>
{% load staticfiles %}
{% load static %}
{% load user_tags %}
<title> DatasystemsEC - Accueil </title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="{% get_static_prefix %}{{ mytheme }}/css/Base_Accueil.css"/>
Цель состоит в том, чтобы подобрать переменную mytheme
в моем файле tags.py и вставки это в моем html-шаблоне.
В свою очередь, я получаю все время:
#Look double // in my url
http://localhost:8000/static//css/Base_Accueil.html
#I should get
http://localhost:8000/static/{{ mytheme }}/css/Base_Accueil.html
Но после долгой паузы для поиска решения и щедростью от @DanielRoseman в моем предыдущем посте, я не найти решение.
Возможно, у кого-то были индексы или идеи?
Спасибо
Извините, если это глупый вопрос, но вместо того, чтобы делать пользовательские тег, почему вы не просто добавить 'mytheme' в контекст шаблона в представлении? Что-то вроде этого 'context ['mytheme'] = Theme.objects.values_list ('favorite_theme'). Last()'. Кроме того, если у каждого пользователя есть своя тема, вы не должны фильтровать тему только для текущего пользователя: 'Theme.objects.filter (user = request.user) .values_list ('favorite_theme'). Last()' – neverwalkaloner
Это совсем не так. глупый вопрос ! Тема должна применяться повсюду на моем сайте django. Выбранная тема меняет цвет фона, ... на всех страницах шаблона html. Только администратор (то есть я) может изменить тему, просто проверив RadioSelectBox. Если я поставил 'mytheme', я должен сделать это во всех представлениях (около 10 приложений) и для каждой функции правильно? Вот почему файл тегов кажется лучшей идеей, но я могу сделать ошибку ^^ – Deadpool
Ну, попробуйте исправить пару вещей. Прежде всего удалите аргумент из 'GetTheme', чтобы избежать переопределения имени' Theme': 'def GetTheme():'. Во-вторых, перед использованием этого параметра присвойте переменной 'mytheme' в шаблоне:' {% GetTheme как mytheme%} '. – neverwalkaloner