Django - Несколько приложений на одной веб-странице?

Я посмотрел по сети и не нашел ответа. Я новичок в Django. Я сделал официальный учебник и прочитал еще много, но, к сожалению, все они сосредоточены на создании только одного приложения. Поскольку это не так просто, чтобы иметь страницу как одно приложение, я хотел бы попросить гуру Django объяснить, как я могу иметь несколько приложений на веб-странице. Скажем, я перехожу на mysite.com, и я вижу приложение для опроса, отображающее опрос, приложение галереи, отображающее некоторые фотографии, новостное приложение, отображающее последние новости и т.д., И все они доступны через один URL-адрес. Я знаю, что я показываю в шаблоне, но, очевидно, должен иметь доступ к данным. Создать представление для возврата нескольких видов? Любые советы, ссылки и примеры очень ценятся.

Ответ 1

Вы можете сделать что-то подобное, чтобы отображать данные приложения на странице.

views.py

def home(request, template='path/to/template'): 
     context = {
        'polls': Poll.objects.all(),
        'galleries': Gallery.objects.all(),
    }
    return (request, template, context)

В шаблоне:

{% for poll in polls %}
{{ poll }}
{% endfor %}
{% for gallery in galleries %}
{{ gallery }}
{% endfor %} 

urls.py

url('home/$', app.views.home, name='home')

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

Ответ 2

Приложение django на самом деле не отображает страницу, скорее, оно сопоставляется с функцией. Приложения будут для таких вещей, как приложение "опросы" или "новостное" приложение. Каждое приложение должно иметь одну главную модель, возможно, пару поддерживающих. Как новостное приложение может иметь модель для статей, поддерживая такие модели, как авторы и средства массовой информации.

Если вы хотите отобразить несколько, вам потребуется приложение для интеграции. Один из способов сделать это - иметь приложение "проект" рядом с вашими опросами и новостными приложениями. Приложение проекта предназначено для вашего конкретного website-, это логика, характерная для этого приложения. Он будет иметь ваши основные urls.py, ваши базовые templat (s), подобные вещи. Если вам нужна информация из нескольких приложений на одной странице, вы должны иметь представление, которое возвращает информацию из нескольких приложений. Скажем, например, что у вас есть представление, которое возвращает информацию для новостной статьи, и информацию, возвращающую информацию для опроса. Вы могли бы иметь представление в своем проектном приложении, которое вызывает эти две функции просмотра и привязывает возвращенные данные к другому шаблону, в котором есть точки для обоих из них.

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

Ответ 3

Каждая страница или представление должны содержаться в одном приложении, однако вы можете загружать в другие приложения из приложения. Однако это делает приложение зависимым от других приложений.

Поэтому, если вы хотите отобразить что-то из приложения под названием "otherapp" в этом приложении под названием "thisapp", тогда в thisapp.views вы просто добавите импорт в верхнюю часть файла, например,

from otherapp.models import OtherAppModel

После того, как вы сделаете импорт, вы сможете получить доступ к этим моделям и методам. Также убедитесь, что вы добавили все приложения в список INSTALLED_APPS в свой файл настроек.

Ответ 4

Вы можете создать макет с несколькими div, с целью распространения на каждом из ваших приложений, вы можете легко нарисовать внутри каждого div содержимое каждого URL-адреса приложения, которое вы хотите, как и поиск в google с предварительными просмотрами. В вашем конкретном случае вы можете использовать общий CSS для всех своих приложений, чтобы избежать использования методов изоляции CSS. Другое решение - использовать iframes.... Это может быть полезно:

Ajax/jQuery - загрузить содержимое веб-страницы в div на загрузку страницы?

https://pythonhosted.org/django-portlets/

https://github.com/diefenbach/django-portlets

Надеюсь, поможет

Ответ 5

По моему опыту это обычно делается с помощью тегов шаблонов https://docs.djangoproject.com/en/dev/ref/templates/builtins/. В вашем примере для добавления опроса на страницу вы создадите приложение опросов, а затем используя тег шаблона, добавьте опрос на страницу. Опрос не будет частью вашего мнения.