请求不适用于django中URL模式的条件

时间:2012-04-08 19:39:53

标签: django django-urls django-1.3

我有条件地使用两个不同的网址模式,意思是在一个网址上我有条件地检查usertype,然后相应地制作网址格式。以下是我的urls.py中的内容

from django.conf.urls.defaults import *
from project import settings  
from accounts.models import UserProfile

profile=request.user.get_profile() 

urlpatterns=patterns('accounts.views',
        (r'^register/$','register',{'template_name':'accounts/     register.html'},'register'),
 )

try:
   profile.profile1
   urlpatterns+=patterns("profile1.views",
        (r'^dashboard/$','dashboard'),
   )
except UserProfile.DoesNotExist:
   urlpatterns+=patterns("profile2.views",
        (r'^dashboard/$','dashboard'),
   )

urlpatterns+=patterns('django.contrib.auth.views',
        (r'^login/$','login',{'template_name':'account/login.html'},'login'),
)

现在,当我尝试使用request.user.get_profile获取用户个人资料时,django表示请求未定义。这是真的,但我如何通过使用一些导入来定义这个配置文件,或者还有其他更好的方法来做这样的事情?

1 个答案:

答案 0 :(得分:2)

Python中没有代码可以自动访问其他地方定义的变量。名称必须始终在当前模块中定义,或从其他地方导入。这适用于请求和任何其他Python变量。

但是,即使您能够将请求变量输入urls.py,这仍然无效。 URLconf对于整个服务器进程是通用的,并非特定于每个请求。在评估网址时,根本就没有“请求”或“用户”这样的东西。

正确的方法是为dashboard定义一个简单的视图,只检查request.user,然后从那里调度到正确的函数。