Я искал 2 дня, прежде чем опубликовать это, так что я действительно надеюсь, что это не повторяющийся вопрос.
Я создаю свой первый Django сайт, и после того, как я на него зашел, я понял, что предпочел бы иметь Сила Джинджи2. Я установил jinja2 в свою виртуальную среду и внес необходимые изменения в django (см. Ниже). Тем не менее, django отображает шаблон с помощью стандартного механизма шаблонов django вместо jinja2.
Весь мой код работает должным образом при использовании {% block content%} содержимого шаблона {% endblock content%}
Вместо блока я пытаюсь использовать шаблон {% set%} content {% endset%}, чтобы я мог продублировать шаблон в базе. html. но я получаю эту ошибку:
django.template.exceptions.TemplateSyntaxError: Invalid block tag on line 7: 'set'. Did you forget to register or load this tag?
[05/Mar/2020 22:27:37] "GET /bge/ HTTP/1.1" 500 161659
Я внес следующие изменения в свой проект, чтобы попытаться заставить работать jinja2:
Настройки:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.jinja2.Jinja2'
,
'DIRS': [os.path.join(BASE_DIR, 'templates/jinja2')],
'APP_DIRS': True,
'OPTIONS': {
'environment': 'bge_app.jinja2.environment'
},
},
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [(os.path.join(BASE_DIR, 'templates')),],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
jinja2.py добавлено в django_projects \ bge \ bge_app
from django.contrib.staticfiles.storage import staticfiles_storage
from django.urls import reverse
from jinja2 import Environment
def environment(**options):
env = Environment(**options)
env.globals.update({
'static': staticfiles_storage.url,
'url': reverse,
})
return env
Это шаблон в django_projects \ bge \ bge_app \ templates \ jinja2 \ dice. html
{% extends "base.html" %}
{% load static %}
{% block title %}
<Title>Dice</Title>
{% endblock title %}
{% set dice_content %}
<br/>
<div class="container">
<div class="row">
<form class="m-3" method="POST">
{% csrf_token %}
<div class="input-group">
<div class="input-group-prepend">
<button type="submit" class="btn btn-info">Add Die</button>
{{ die_size_form.num_sides }}
{{ die_size_form.active }}
</div>
</div>
</form>
<a href="{% url 'roll_dice' %}">
<button type="button" class="btn btn-info m-3">Roll Dice</button>
</a>
<table class="m-2 table-bordered text-center">
<tr>
<th class="p-2">Roll Sum</th>
</tr>
<tr>
<td>
{{ active_dice_sum }}
</td>
</tr>
</table>
</div>
<table class="table-hover table-bordered text-center table-sm col-md-10">
<tr>
<th> Die Sides</th>
<th> Die Status</th>
<th> Roll Value</th>
<th> Remove Die</th>
</tr>
{% for die in all_dice %}
{% if die.active %}
{% if die.num_sides == 6 %}
<tr>
<td>D6 <img src="{% static '/images/dice/d6.png' %}" alt="D 6"></td>
<td><a href="{% url 'deactivate_die' die.id %}">
<button type="button" class="btn btn-success">Active</button>
</a>
</td>
<td> {{ die.roll_value }} </td>
<td><a href="{% url 'remove_die' die.id %}">
<button type="button" class="btn btn-danger">X</button>
</a>
</td>
</tr>
{% else %}
<tr>
<td>D {{ die.num_sides }}</td>
<td><a href="{% url 'deactivate_die' die.id %}">
<button type="button" class="btn btn-success">Active</button>
</a>
</td>
<td> {{ die.roll_value }} </td>
<td><a href="{% url 'remove_die' die.id %}">
<button type="button" class="btn btn-danger">X</button>
</a>
</td>
</tr>
{% endif %}
{% else %}
<tr>
<td>D {{ die.num_sides }}</td>
<td><a href="{% url 'activate_die' die.id %}">
<button type="button" class="btn btn-secondary">Inactive</button>
</a>
<td> {{ die.roll_value }} </td>
<td><a href="{% url 'remove_die' die.id %}">
<button type="button" class="btn btn-danger">X</button>
</a>
</td>
</tr>
{% endif %}
{% endfor %}
</table>
{% endset dice_content %}
</div>
Вот база. html
{% load static %}
<!doctype html>
<html lang="en">
<head>
<!-- Required meta tags -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<nav class="navbar navbar-expand-lg navbar-dark bg-primary">
<a class="navbar-brand" href="{% url 'index' %}"><i>Board Game Essentials</i></a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item active">
<a class="nav-link" href="{% url 'player_setup' %}">Player Setup</a>
</li>
<li class="nav-item active">
<a class="nav-link" href="{% url 'die_pool' %}">Dice</a>
</li>
<li class="nav-item active">
<a class="nav-link" href="{% url 'hp_tracker' %}">HP Tracker</a>
</li>
<li class="nav-item active">
<a class="nav-link" href="{% url 'score_calc' %}">Score Calculator</a>
</li>
</ul>
</div>
</nav>
{#want to call set multiple times here#}
<!-- Optional JavaScript -->
<!-- jQuery first, then Popper.js, then Bootstrap JS -->
<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
</body>
</html>