每次打开页面时,我都希望获得当前活动的项目ID。这将通过查找子域并验证当前登录的用户可以查看它来完成。
一旦我达到我的观点,我希望能够做到
tasks = Task.objects.filter(project = current_project)
WHere current_project(或CURRENT_PROJECT或 current_project ???)已经设置完毕。
任何人都可以解释我在文档中找到的各种方法的利弊,并让我走上正轨吗?
这就是我最终做到的方式:
装饰:
def check4project(fn):
current_project = 'fred'
def check(*args, **kw):
kw['project']=current_project
return fn(*args, **kw)
return check
查看示例
@login_required
@check4project
@tweetpost
def index(request, project=0):
print project
答案 0 :(得分:4)
这一切都取决于你对“当前项目”的语义是什么。以下是一些可能性:
这可能是用户的一个特征:他访问他的个人资料页面并设置当前项目。这将存储在数据库中,您可以使用ORM访问它。
它可能是URL的一个特征,仅基于子域。这可以通过中间件来完成,中间件可以访问请求,例如,可以解析主机名,并在您可以在视图函数中访问的请求上设置自定义属性。
与#2类似,如果为某些视图检查项目但不是全部视图,则可以使用视图装饰器。这类似于Django用于检查授权的装饰器。
这可能是用户访问该网站的一个特征:他访问了一个项目页面,选择了一个项目,并且在他选择另一个项目之前它是粘性的。这最好存储在会话中,该会话专门用于此类瞬态存储。
根据你的描述,#2或#3最适合你,这取决于你的观点如何在关心子项目之间划分。
答案 1 :(得分:1)
您可以创建一个context_processor,然后从请求对象中获取您的值。
答案 2 :(得分:0)
您考虑过custom template tag吗?