Как два приложения могут отвечать на один и тот же URL-адрес в Django? - PullRequest
0 голосов
/ 30 января 2012

Я думаю, что мне здесь не хватает основной концепции. В стереотипном проекте Django у вас будет два приложения, отвечающих на разные URL:

http://localhost/myproj/app1/33
http://localhost/myproj/app2/newcomment.html

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

В частности, я не понимаю, как оба приложения могут использовать наследование шаблонов для расширения одного и того же шаблона. Представьте, что есть базовое приложение "baseapp" с шаблоном "base.html":

...
<div blah blah>
{% block content %}
{% endblock %}
...

Приложение 1 расширяет его:

{% extends "baseapp/templates/base.html" %}

{% block content %}
... here's the actual content...
{% endblock %}

Приложение 2 добавляет небольшой баннер или что-то в этом роде:

{% extends "baseapp/templates/base.html" %}

{% block content %}
<div class="banner">Please support our site!</div>
{{ block.super }}
{% endblock %}

Так как же отображаются оба шаблона? Я могу думать о:

  1. app1 может расширять шаблоны app2. Но это кажется неправильным: app1 является поставщиком контента и не должен зависеть от чего-то столь же тривиального, как app2.
  2. app2 может расширять шаблоны app1. Но это кажется неправильным: теперь схема URL должна будет направлять каждый URL через app2 (если я правильно понимаю)
  3. промежуточный слой

Как я уже сказал, я, вероятно, упускаю что-то очень простое. Или я делаю некоторые очень ошибочные предположения, о которых я не знаю. (Этот вопрос - моя третья попытка после Вставить дополнительное приложение Django на другую страницу, если это приложение присутствует и Как собирать и отображать информацию, внешнюю по отношению к моему веб-приложению, но относящуюся к пользователям этого ? - У меня проблемы с формулировкой проблемы.)

Ответы [ 2 ]

2 голосов
/ 30 января 2012

Приложение не отвечает на URL, а представление не отвечает. Представление - это функция, которая может использовать модели, формы и другие объекты из любого приложения. Здесь нет никаких проблем.

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

0 голосов
/ 02 февраля 2012

Я думаю, что мне здесь действительно не хватало:

  • Приложения могут переопределять шаблоны, просто добавляя шаблон с правильным именем в нужный подкаталог.Документы Django не очень ясно дают понять, что я вижу: они ссылаются на эту функциональность в контексте шаблонов администратора
  • При переопределении шаблона, как описано выше, вы не можете расширить его, но:
  • Этот фрагмент позволяет вам переопределить шаблон и расширить его: http://djangosnippets.org/snippets/1376/

Вот тесно связанный вопрос: Django: переопределение и расширение шаблона приложения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...