Django Передача списка объектов в шаблон - PullRequest
3 голосов
/ 03 мая 2011

У меня проблемы с передачей моих get_profiles в том же шаблоне, что и r '^ compose / $' здесь.r '^ users / $' - это то, что я использую в качестве модели, и это работает.«compose» - это функция в моем views.py.

from django.conf.urls.defaults import *
from django.views.generic.simple import redirect_to
from django.views.generic.simple import direct_to_template

from messages.views import *

from userprofile.views import get_profiles

urlpatterns = patterns('',
    url(r'^$', redirect_to, {'url': 'inbox/'}),
    url(r'^inbox/$', inbox, name='messages_inbox'),
    url(r'^outbox/$', outbox, name='messages_outbox'),
    url(r'^compose/$', compose, name='messages_compose'),
    url(r'^users/$', direct_to_template, {'extra_context': { 'profiles': get_profiles }, 'template': 'messages/users.html' }),
)
userprofile/views.py
def get_profiles():
    return Profile.objects.order_by("user")

Я пробовал это:

url(r'^compose/$', compose, direct_to_template, {'extra_context': { 'profiles': get_profiles },  'template': 'messages/compose.html' }),

Но я получаю объект функции не повторяемый.

Ответы [ 3 ]

2 голосов
/ 03 мая 2011

Как уже говорили другие, вам нужно вызвать функцию, но если вы сделаете это в urls.py, она будет оцениваться только один раз за процесс.Вы не хотите этого делать.

Вы не показываете, что делает get_profiles, но я предполагаю, что это какая-то служебная функция.Я склонен думать, что они принадлежат отдельному файлу lib.py или utils.py, а не views.py.(То есть, если предположить, что это на самом деле не само представление - если это так, то вам нужно переосмыслить весь ваш подход).

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

0 голосов
/ 03 мая 2011

get_profiles(), с круглыми скобками

0 голосов
/ 03 мая 2011

Попробуйте добавить скобки к вызову функции?

'profiles': get_profiles()

В противном случае вы просто передаете ссылку на объект функции.

Но проблема в том, что это будет оценено только один раз,когда вызывается urls.py.

Почему бы не сделать функцию просмотра соответствующей URL 'users /'?

...