#django #templates #view
#django #шаблоны #Вид
Вопрос:
Я начинаю проект анализа данных в django и хочу отображать текстовые данные и графические данные в одной табличке, которые генерируются из разных представлений. Это хорошая практика, чтобы сделать это так, или я должен использовать два разных шаблона для текстовых данных и графических данных?
Комментарии:
1. нет, вы должны использовать одно представление для отображения одной страницы. Но вы можете использовать iframe для загрузки контекстов из другого представления
2. Что вы подразумеваете под сгенерированным из разных представлений? Вы можете получить оба данных в представлении и отобразить их в одном шаблоне
3. @grouchoboy.. я хочу создать два представления, одно для текстовых данных, а другое для графических данных и один HTML-файл для отображения как текстовых данных, так и графиков. Я не понимаю, как это сделать.
Ответ №1:
Это возможно. Представление отвечает за создание ответа на основе запроса и его возврат и может использовать любой подход, который имеет смысл для этого. Шаблон — это один из инструментов для этого, и ничто не мешает вам использовать данный шаблон в нескольких представлениях. Если вы используете функциональные представления, это может выглядеть примерно так:
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)
Детали могут отличаться — дело просто в том, что нет ничего, что привязывало бы шаблон только к одному представлению.
Является ли это хорошей идеей или нет, зависит от того, какая часть поведения шаблона разделяется между вашими двумя случаями. В общем, я бы вместо этого рекомендовал разложить общие части шаблона на родительский шаблон и использовать наследование шаблонов для специализации различного поведения, специфичного для разных типов данных, без повторения общих частей. Даже если текущее поведение отображения одинаково, использование двух разных шаблонов упрощает изменение этого в будущем, если вы захотите.
Если один шаблон действительно может обрабатывать оба случая без необходимости определять тип данных, и вы не ожидаете его изменения, разумным выбором может быть повторное использование одного шаблона в обоих представлениях, а не создание специфичных для типа.
Ответ №2:
Вы можете использовать один базовый шаблон, а затем в блоке этого шаблона отображать данные
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}
Комментарии:
1. Я могу создать одно представление и один шаблон. Но я обеспокоен, потому что тогда в одном представлении так много кода. Вот почему я прошу два или более представления и один HTML-файл одновременно отображать контекст из представлений. Я не получил ответа, но спасибо, что уделили ваше время.