我无法将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' }),
但是我得到的函数对象不可迭代。
答案 0 :(得分:2)
正如其他人所说,你需要实际调用该函数,但是如果你在urls.py中这样做,那么每个进程只会评估一次。你不想这样做。
您没有显示get_profiles
的作用,但我认为它是某种实用功能。我倾向于认为那些属于单独的文件lib.py
或utils.py
,而不是views.py。 (也就是说,假设它本身并不是一个视图 - 如果是,那么你需要重新考虑你的整个方法。)
但是,我认为您实际需要做的是制作模板标签。如果您愿意,可以将逻辑保留在get_profiles
中,然后创建一个调用该函数的简单标记。然后你不需要在extra_context
中传递数据 - 只需将标记添加到模板中。
答案 1 :(得分:0)
尝试在函数调用中添加括号吗?
'profiles': get_profiles()
否则你只是传递对函数对象的引用。
但问题是,只有在调用urls.py时才会对此进行评估。
为什么不使视图功能与url'users /'对应?
答案 2 :(得分:0)
get_profiles()
,带括号