Django ссылки на ссылки между приложениями - PullRequest
1 голос
/ 01 ноября 2011

У меня есть проект, который только что ассимилировал несколько приложений из других моих проектов в один основной проект. Структура - это одно из основных приложений, лежащих в корневом URL-адресе, и других приложений с определенными URL-адресами. Я настроил свой urls.py:

url(r'^$', include('main_app.urls')),
url(r'^app1/', include('app1.urls')),
url(r'^app2/', include('app2.urls')),
url(r'^app3/', include('app3.urls')),

В моем main_app models.py есть модель, которая описывает мои другие приложения в следующем виде:

class App(models.Model):
    title = models.CharField()
    image = models.ImageField("App Image", upload_to="images/apps/", blank=True, null=True)
    description = models.TextField()

И в моих представлениях main_app:

def index(request):
    app_list = App.objects.all()
    return render_to_response('index.html',
            locals(), context_instance=RequestContext(request)) 

Итак, в моем шаблоне корневого индекса (main_app) я хочу просмотреть все приложения и напечатать ссылку:

{% for app in app_list %}
    {{ some_app_variables }}
    <a href="???">Link to app</a>
{% endfor %}

Мой вопрос: как мне определить эту ссылку? Должен ли я получить get_absolute_url для модели приложения?

Любая помощь высоко ценится.

1 Ответ

0 голосов
/ 01 ноября 2011

С приложением не связано несколько URL-адресов. URL-адреса привязаны к представлениям, и эти представления могут ссылаться на любую модель из любого приложения или вообще без моделей или приложений. То, что ты делаешь, не имеет смысла.

ОБНОВЛЕНИЕ: Я все еще не уверен в том, на что вы ссылаетесь. «Приложение» - это абстрактное понятие. Я понимаю, что у меня есть список "приложений", но какой вид вы бы выбрали для отдельного приложения? Тем не менее, да, у вас должен быть get_absolute_url метод на вашей Apps модели. Тогда вам лучше всего назвать любое представление в каждом приложении, которое будет «индексным» представлением в соответствии с «app_ (title)». Тогда вы можете построить правый реверс с чем-то вроде:

@models.permalink
def get_absolute_url(self):
    return ('app_%s' % self.title, (), {})

Конечно, вам, вероятно, следует изменить это с помощью чего-то похожего на слаг, чтобы вместить заголовки, которые могут иметь несколько слов, например, «Прохладное приложение» должно быть заменено чем-то вроде «cool_app».

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

...