ФорумПрограммированиеPythonDjango → Вопрос по view в django

Вопрос по view в django

  • Crank

    Сообщения: 541 Репутация: N Группа: Джедаи

    Spritz 9 октября 2015 г. 5:09

    Что-то не получается загуглить, так что спрошу здесь.

    У меня есть view, где переменная с html кодом отправляется в контекст через render(request, 'template.html', context).
    Я хочу чтобы джанго обрабатывал в этой переменной теги шаблонизатора, как это можно сделать?

  • Sinkler

    Сообщения: 8083 Репутация: N Группа: в ухо

    Spritz 9 октября 2015 г. 5:19, спустя 9 минут 54 секунды

    не знаю зачем, но можно заранее отрендерить

    from django.template import loader
    t = loader.get_template_from_string('text with django tags')
    out = t.render(context)

    и в шаблоне потом при необходимости обернуть эту переменную фильтром |safe чтобы не экранировался html

  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 9 октября 2015 г. 6:06, спустя 47 минут 5 секунд

    не знаю зачем

    @Crank, и вправду, зачем?

    Спустя 10 сек.

    интересно стало

    adw/0
  • Crank

    Сообщения: 541 Репутация: N Группа: Джедаи

    Spritz 9 октября 2015 г. 6:12, спустя 6 минут 35 секунд

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

    спасибо, получилось примерно так:

    
    from django.template import Template, Context
    
    t = Template('{% load content_extars %}' + content.content)
    content.content = t.render(Context())
    

    Но теперь проблема в другом, оно не хочет видеть файл с определением кастомного тега хотя делал как написано в доках (права доступа тоже проверил)

    
    /content/templatetags/
                         |-  __init__.py
                         |- content_extars.py
    

    Текст ошибки
    'content_extars' is not a valid tag library: Template library content_extars not found, tried django.templatetags.content_extars,django.contrib.admin.templatetags.content_extars,django.contrib.staticfiles.templatetags.content_extars,content.templatetags.content_extars

    Что же я делаю не так?

  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 9 октября 2015 г. 6:16, спустя 3 минуты 15 секунд

    1. __init__.py есть в /content/?
    2. content есть в INSTALLED_APPS?

    Спустя 123 сек.

    Хотя вижу упоминание "content.templatetags.content_extars", вроде как он пробует. Покажи что внутри content_extars.py?

    adw/0
  • Crank

    Сообщения: 541 Репутация: N Группа: Джедаи

    Spritz 9 октября 2015 г. 6:30, спустя 14 минут 38 секунд

    @adw0rd, да все есть

    код content_extars.py

    
    # from content.models import ContentElements
    
    from django import template
    register = template.Library()
    
    @register.simple_tag
    # def content_url(pk):
    def content_url():
    
        # content = ContentElements.objects.get(pk=pk)
    
        # return ContentElements.get_url(content)
        return '[test tag]'
    
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 9 октября 2015 г. 6:39, спустя 8 минут 36 секунд

    Запусти в ./manage.py shell

    from content.templatetags import content_extars
    dir(content_extars.content_url)
    

    что пишет?

    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 9 октября 2015 г. 6:45, спустя 5 минут 39 секунд

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

    @Crank, ага, была такая задачка тоже с одними мудаками. Статьи/новости в базе, но хочется вещи унифицировать некоторые поэтому был app pages, в котором хранились штуки для вывода каких то блоков, счетчиков по приложению или тп. В общем годный вариант.

    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 9 октября 2015 г. 6:50, спустя 5 минут

    @phpdude, вообще есть готовые приложеньки аля "django-db-template", вроде как там всё есть из коробки + в админке будет редактор с подсветкой синтаксиса шаблона)

    Спустя 19 сек.

    видел в презенташке года 3-4 назад

    adw/0
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 9 октября 2015 г. 6:53, спустя 3 минуты 52 секунды

    @adw0rd, и чо? у меня тоже с подсветкой синтаксиса он

    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 9 октября 2015 г. 6:55, спустя 1 минуту 7 секунд

    @phpdude, не люблю тратить время на то, что можно просто установить. Тем более делать такую систему просто скучно, задача из разряда "рутина"

    adw/0
  • Crank

    Сообщения: 541 Репутация: N Группа: Джедаи

    Spritz 9 октября 2015 г. 6:55, спустя 35 секунд

    @adw0rd, не хочет он его видеть (((

    
    >>> from content.templatetags import content_extars
    Traceback (most recent call last):
      File "<console>", line 1, in <module>
    ImportError: cannot import name content_extars
    >>> dir(content_extars.content_url)
    Traceback (most recent call last):
      File "<console>", line 1, in <module>
    NameError: name 'content_extars' is not defined
    
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 9 октября 2015 г. 6:57, спустя 1 минуту 42 секунды

    @phpdude, не люблю тратить время на то, что можно просто установить. Тем более делать такую систему просто скучно, задача из разряда "рутина"

    @adw0rd, ну с нашими дибилами, просто скучно - 99% задач. Поэтому я тебе могу сказать что это еще было не скучно, а очень весело ))

    Сапожник без сапог
  • adw0rd

    Сообщения: 22905 Репутация: N Группа: в ухо

    Spritz 9 октября 2015 г. 6:59, спустя 1 минуту 45 секунд

    @Crank, ну вот и разгадка. Покажи INSTALLED_APPS, у тебя наверное не "content", а "<project>.content" написано.
    Т.е. в импорте не хватает

    from &lt;project>.content.templatetags import content_extars
    
    adw/0
  • Crank

    Сообщения: 541 Репутация: N Группа: Джедаи

    Spritz 9 октября 2015 г. 7:01, спустя 2 минуты 18 секунд

    @adw0rd,

    
    INSTALLED_APPS = (
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'content',
        'data_blocks',
    )
    

Пожалуйста, авторизуйтесь, чтобы написать комментарий!