Есть ли способ, которым мы можем визуализировать более одного представления в одном шаблоне в Django?Если есть какие лучшие практики, чтобы сделать это?заранее спасибо - PullRequest
0 голосов
/ 18 апреля 2019

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

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Это возможно.Представление отвечает за создание ответа на основе запроса и его возврат и может использовать любой подход, который имеет для этого смысл.Шаблон является одним из инструментов для этого, и ничто не мешает вам использовать данный шаблон в нескольких представлениях.Если вы используете функциональные представления, это может выглядеть примерно так:

def display_text(request):
    context = ...
    return render(request, "data.html", context)

def display_graph(request):
    context = ... # some different context than the text case
    return render(request, "data.html", context)

Детали могут различаться - дело просто в том, что ничто не связывает шаблон только с одним представлением.

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

Если один шаблон может действительно обрабатывать оба случая без необходимости определять, какие данныеtype, и вы не ожидаете его изменения, поэтому может быть разумным выбрать повторное использование одного шаблона в обоих представлениях, а не создавать специфичные для типа.

0 голосов
/ 18 апреля 2019

Вы можете использовать один базовый шаблон, а затем в блоке этого шаблона отобразить данные

base_data.html

  some html
{% block data %}
{% endblock %}
   more html

text_data.html

{% extends 'base_data.html' %}

{% block data %}
   html to display the text data
{% endblock %}

graph_data.html

{% extends 'base_data.html' %}

{% block data %}
 html to display the graph data
{% endblock %}

views.py

def display_text_data(request):
    # your code
    return render(request, 'text_data.html', context)

def display_grapth_data(request):
    # your code
    return render(request, 'graph_data.html', context)

Я не знаю точно, хотите ли вы, чтобы вышеперечисленное или если вы хотите, чтобы в одном html отображались два, текст и график, это будет второе:

data.html

display text_data using textdata context

display graph data using graphdata context

views.py

def show_data(request):
    textdata = # get text data context
    graphdata = # get graph data context
    return render(request, 'data.html', context={'textdata': textdata, 'graphdata': graphdata}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...