Digamos que eu tenho um modelo
<html>
<div>Hello {{name}}!</div>
</html>
Durante o teste, seria útil definir o valor da variável sem tocar no código python que chama esse modelo. Então, eu estou procurando algo como isto
{% set name="World" %}
<html>
<div>Hello {{name}}!</div>
</html>
Existe algo assim no Django?
django
django-templates
Alexis
fonte
fonte
Crie uma tag de modelo:
O aplicativo deve conter um
templatetags
diretório, no mesmo nível quemodels.py
,views.py
etc. Se isso ainda não existir, crie-o - não esqueça o__init__.py
arquivo para garantir que o diretório seja tratado como um pacote Python.Crie um arquivo nomeado
define_action.py
dentro do diretório templatetags com o seguinte código:Nota: O servidor de desenvolvimento não será reiniciado automaticamente. Depois de adicionar o
templatetags
módulo, você precisará reiniciar o servidor antes de poder usar as tags ou filtros nos modelos.Em seu modelo, você pode atribuir valores ao contexto da seguinte maneira:
fonte
add
:{% define counter|add:1 as counter %}
. Da mesma forma para outras operações.Uma maneira alternativa que não exige que você coloque tudo no bloco "com" é criar uma tag personalizada que adicione uma nova variável ao contexto. Como em:
Isso permitirá que você escreva algo assim no seu modelo:
Observe que a maior parte disso foi tirada daqui
fonte
Existem truques como o descrito por John; no entanto, a linguagem de modelo do Django por design não suporta a configuração de uma variável (consulte a caixa "Filosofia" na documentação do Django para obter modelos ).
Por esse motivo, a maneira recomendada de alterar qualquer variável é através do toque no código Python.
fonte
A melhor solução para isso é escrever um costume
assignment_tag
. Essa solução é mais limpa do que usar umawith
tag, pois consegue uma separação muito clara entre lógica e estilo.Comece criando um arquivo de tag de modelo (por exemplo
appname/templatetags/hello_world.py
):Agora você pode usar a
get_addressee
tag template nos seus modelos:fonte
Talvez o
default
filtro de modelo não fosse uma opção em 2009 ...fonte
{% with state=form.state.value|default:other_context_variable %}
em vez deother_context_variable
nós também pode usar qualquer'string_value'
bemEsta não é uma boa ideia em geral. Faça toda a lógica em python e passe os dados para o modelo para exibição. O modelo deve ser o mais simples possível para garantir que aqueles que trabalham no design possam se concentrar no design, em vez de se preocupar com a lógica.
Para dar um exemplo, se você precisar de algumas informações derivadas em um modelo, é melhor inseri-las em uma variável no código python e depois passá-las para o modelo.
fonte
Use a instrução with .
Não posso sugerir o código no primeiro parágrafo desta resposta . Talvez a linguagem do modelo tenha descontinuado o formato antigo.
fonte
No seu modelo, você pode fazer assim:
Nas suas tags de modelo, você pode adicionar uma tag como esta:
fonte