【发布时间】:2014-02-01 11:39:53
【问题描述】:
在我的应用中,用户可以创建和管理organizations -> projects -> resources 等等。 project 实例有一个指向organization 的外键,resource 有一个指向project 的外键。
例如,当用户选择一个活动组织时,我希望projects 视图仅显示属于该组织的项目。我看到了这些方式:
所有特定网址中的可选参数:
url(r'^(?:organization/(?P<organization_id>\d+)/)?projects/$', 'app.views.projects', name='projects'),
url(r'^(?:organization/(?P<organization_id>\d+)/)?(?:project/(?P<project_id>\d+)/)?resources/$', 'app.views.resources', name='resources'),
此外,此方法强制重写模板中的所有{% url %} 标签:
`{% url 'projects' org.id %}`
`{% url 'resources' org.id prj.id %}`
但这一切看起来并不漂亮,尤其是urls.py。
更新 1
此方法强制每次在模板中传递organization_id。即使我编写中间件以避免烦人的在上下文中传递它,
class FetchFiltersMiddleware(object):
def process_view(self, request, view_func, view_args, view_kwargs):
request.project_id = view_kwargs.get('project_id', 0)
request.organization_id = view_kwargs.get('organization_id', 0)
无论如何,必须重写所有网站网址以包含organization_id,否则过滤将被破坏。即使没有必要,即在用户个人资料视图中,所有指向projects 的侧边栏链接都将被破坏。
在 cookie 或 GET 参数中存储当前过滤器
喜欢{% url 'myurl' %}&project={{ project_id }}。坏的。丑。
将最后选择的organization/project id 存储在缓存或会话中
易于使用。但不是用户显式的。此外,当站点在多个选项卡中打开并且在每个选项卡上选择了不同的组织时,它也会产生问题。
此时我发现第一种方式看起来更好,但需要进行大量重写工作。有没有更好的方法来进行基于类别/部分的过滤?
更新 2
如果它还不干净。项目或组织的选择——它实际上是在切换当前的显示上下文。在所选组织的上下文中,所有链接都应指向该组织中的项目,依此类推。
【问题讨论】:
标签: django django-templates django-urls django-filters