Как повторить “блок” в шаблоне django

Для хороших зашифрованных сообщений или контрольных сумм вероятность столкновения практически невозможна.

Хорошие алгоритмы шифрования и контрольной суммы создают зашифрованные сообщения, которые неотличимы от случайности. Все, что меньше, означает, что что-то из исходного сообщения выживает. Это означает, что любой данный токен доступа с равной вероятностью сопоставляется с любым возможным зашифрованным сообщением. Все, что меньше, позволит злоумышленнику угадать сообщение.

Криптографическая стойкость HMAC зависит от криптографической стойкости лежащей в основе хеш-функции, размера ее хеш-вывода, а также размера и качества ключа.

blockquote>

Хотя это не совсем нарушено, безопасность SHA-1 была значительно подорвана . Вы должны использовать SHA-256 или лучше.

122
задан niton 15 April 2015 в 21:39
поделиться

7 ответов

Я думаю, что использование контекстного процессора в этом случае является излишним. Вы можете легко сделать это:

#base.html
<html>
    <head>
        <title>{% block title %}My Cool Website{% endblock %}</title>
    </head>
    <body>
        {% block content %}{% endblock %}
    </body>
</html>

, а затем:

# blog.html
{% extends 'base.html' %}
{% block content %}
    <h1>{% block title %}My Blog{% endblock %}</h1>
    Lorem ipsum here...
{% endblock %}

и так далее ... Похоже на DRY-совместимое.

65
ответ дан 24 November 2019 в 01:25
поделиться

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

# base.html
<html>
    <head>
        <title>{{ title|default:"My Cool Website" }}</title>
    </head>
    <body>
        <h1>{{ title|default:"My Cool Website" }}</h1>
    </body>
</html>

Вы затем устанавливаете заголовок через контекст.

18
ответ дан 24 November 2019 в 01:25
поделиться

можно использовать {% include subtemplate.html %} несколько раз. это не то же как блоки, но добивается цели.

12
ответ дан 24 November 2019 в 01:25
поделиться

Существует два легких решения для этого.

самое легкое должно поместить Ваш заголовок в переменную контекста. Вы установили бы переменную контекста в своем представлении.

, Если Вы используете что-то как универсальные представления и не имеете views.py для изображений, кошек, и т.д. затем, можно пойти путем пользовательский тег шаблона, который устанавливает переменную в контексте .

Хождение этим путем позволило бы Вам сделать что-то как:

{% extends "base.html" %}
{% load set_page_title %}
{% page_title "My Pictures" %}
...

Затем в Вашем base.html:

...
{% block title %}{{ page_title }}{% endblock %}
...
<h1>{{ page_title }}</h1>
1
ответ дан 24 November 2019 в 01:25
поделиться

Use the Django template macros plugin:

https://gist.github.com/1715202 (django >= 1.4)

or

http://www.djangosnippets.org/snippets/363/ (django < 1.4)

django >= 1.4

# base.html
{% kwacro title %}
    {% block title %}My Cool Website{% endblock %}
{% endkwacro %}

<html>
    <head>
        <title>{% usekwacro title %}</title>
    </head>
    <body>
        <h1>{% usekwacro title %}</h1>
    </body>
</html>

and

# blog.html
{% extends 'base.html' %}
{% block title %}My Blog{% endblock %}

django < 1.4

# base.html
{% macro title %}
    {% block title %}My Cool Website{% endblock %}
{% endmacro %}

<html>
    <head>
        <title>{% usemacro title %}</title>
    </head>
    <body>
        <h1>{% usemacro title %}</h1>
    </body>
</html>

and

# blog.html
{% extends 'base.html' %}
{% block title %}My Blog{% endblock %}
81
ответ дан 24 November 2019 в 01:25
поделиться

Вот способ, который я обнаружил, пытаясь сделать то же самое сам:

# base_helper.html
<html>
    <head>
        <title>{% block _title1 %}{% endblock %}</title>
    </head>
    <body>
        <h1>{% block _title2 %}{% endblock %}</h1>
    </body>
</html>


# base.html
{% extends "base_helper.html" %}

# Copy title into _title1 & _title2, using "My Cool Website" as a default.
{% block _title1 %}{% block _title2 %}{% block title %}My Cool Website{% endblock %}{% endblock %}{% endblock %}

К сожалению, требуется дополнительный файл, но не требует передачи заголовка из представления.

11
ответ дан 24 November 2019 в 01:25
поделиться

Основываясь на предложении Ван Гейла, вы могли создавать теги get и set, добавив в файл templatetags.py следующее:

register = template.Library()

Stateful = {}
def do_set(parser, token):
    _, key = token.split_contents()
    nodelist = parser.parse(('endset',))
    parser.delete_first_token()  # from the example -- why?
    return SetStatefulNode(key,nodelist)

class SetStatefulNode(template.Node):
    def __init__(self, key, nodes):
        Stateful[key] = nodes
    def render(self, context):
        return ''
register.tag('set', do_set)

def do_get(parser, token):
    tag_name, key = token.split_contents()
    return GetStatefulNode(key)

class GetStatefulNode(template.Node):
    def __init__(self, key):
       self.key = key
    def render(self, context):
        return ''.join( [x.render(context) for x in Stateful[self.key]] )

register.tag('get', do_get)

Затем установите значения в одном шаблоне с помощью {% set foo%} поместите данные сюда {% endset%} и получите их через {% get foo%} в другом.

3
ответ дан 24 November 2019 в 01:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: