2011-05-03 103 views
3

我无法在此处将我的get_profiles传递到与r'^ compose/$'相同的模板中。 r'^ users/$'是我用作模型的工具。 “撰写”是我的views.py中的一个功能。Django将对象列表传递给模板

 
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' }), 

但我得到一个函数对象不是可迭代。

回答

2

正如其他人所说,你需要实际调用的功能,但如果这样做,在urls.py它仅会被每个进程进行评估。你不想这样做。

你不显示什么get_profiles这样做,但我认为它是某种效用函数。我倾向于认为那些属于单独的文件lib.pyutils.py,而不是views.py。 (也就是说,假设它本身不是一个视图 - 如果是,那么您需要重新考虑整个方法)。

但是,我认为你实际上需要做的是制作一个模板标签。如果您愿意,您可以将逻辑保存在get_profiles中,然后制作一个调用该函数的简单标签。然后,您不需要在extra_context中传递数据,只需将标签添加到您的模板即可。

+0

编辑帖子。 get_profiles只是返回我的Profile对象。我想用我的撰写信息在模板中列出这些。你能否详细说明制作模板标签?我将在此搜索。 – leffe 2011-05-03 09:33:09

+0

http://docs.djangoproject.com/en/1.3/howto/custom-template-tags/ - 特别参见关于在上下文中设置变量的部分。请注意,它似乎比实际情况更复杂。 – 2011-05-03 09:35:20

0

尝试添加括号到函数调用可能吗?

'profiles': get_profiles() 

否则,您只是传递函数对象的引用。

但问题是这只会被评估一次,当urls.py被调用。

为什么不使视图函数与URL'users /'相对应?

+0

get_profiles()也给'函数'对象不可迭代。通过使视图函数与url用户通信是什么意思?怎么样?我可以在我的“撰写”中写些什么,这会在compose.html中产生我的用户列表。最终它是一个消息编辑器,我希望用户在编写一个时可见。 – leffe 2011-05-03 09:28:23

0

get_profiles(),用括号

相关问题