0

我有条件地使用两种不同的 url 模式,意味着在一个 URL 上我有条件地检查用户类型,然后相应地制作 URL 模式。以下是我的 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 获取用户配置文件时说未定义请求。这是真的,但我怎样才能通过使用一些导入来定义这个配置文件,或者有其他更好的方法来做这样的事情?

4

1 回答 1

2

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

但是,即使您能够将请求变量放入 urls.py,这仍然行不通。URLconfs 对整个服务器进程是通用的,而不是特定于每个请求。在评估 url 时,根本没有“请求”或“用户”之类的东西。

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

于 2012-04-08T19:57:45.097 回答