Django内部重定向/ url重写

时间:2017-07-25 07:37:47

标签: django url

情况如下:

我有支持按查询参数过滤的网址/app/categories/

  • /app/categories/返回所有类别
  • /app/categories/?project=1返回ID为1的项目的所有类别。

我想要一个URL /app/projects/1/categories,它将返回与/app/categories/?project=1相同的结果,但不必重写视图。是否可以进行某种内部重定向或URL重写,以便在请求/app/projects/1/categories时,结果与调用/app/categories/?project=1相同,但不重定向? (将来我可能需要为不安全的方法做同样的事情)

1 个答案:

答案 0 :(得分:1)

创建一个将项目id作为参数的公共函数,并返回categories对象。

def get_categories(pk):
  categories = Category.objects.filter(project=pk)
  return categories

要添加您的网址,请在urls.py

中添加
url(r'^projects/(?P<pk>\d+)/categories/$', views.category_view,name="yourname"),

你的views.py应该是这样的,

 # /app/categories/?project=1
 def category_view(request):
    get_categories = get_categories(request.GET.get('project_id'))
    # your logic

 # /app/projects/1/categories
 def other_category_view(request,pk):
    get_categories = get_categories(pk)
    # your logic