所有生成的URL上的Django前缀

时间:2012-05-29 21:17:07

标签: django-admin

我的代理(nginx公共端口80)到django(gunicorn wsgi localhost端口8000)剥离了应用程序“/ app”的路径,因此对http://server/app/hello的请求显示为/hello并请求http://server/app/admin似乎将django视为/admin

问题是管理站点在登录屏幕中生成带有绝对URL的输出,例如<form action="/admin/"...。因此,用户会看到管理员登录屏幕,但它会发布到不存在的http://server/admin。 (我希望它会使用相对的URL并在任何地方工作。)

让管理页面普遍预先添加“/ app”(如form action="/app/admin/"到页面输出中生成的所有网址的最简单方法是什么?我希望Django内置的东西就像一个简单的定义,而不必创建特殊的过滤器然后重写模板来使用它们,但我似乎无法找到它。

2 个答案:

答案 0 :(得分:15)

请参阅FORCE_SCRIPT_NAME的文档:

https://docs.djangoproject.com/en/dev/ref/settings/#force-script-name

将其设置为'/ app'而不是默认值None。

答案 1 :(得分:0)

最简单的方法是编写自己的wsgi调度程序,如下面的

def application(environ, request_response):
  # do whatever you want with path

  sys.path.append(path_to_django_project)
  os.environ['DJANGO_SETTINGS_MODULE'] = 'proj_name.settings'

  # pass control to django
  import django.core.handlers.wsgi
  app_entry_point = django.core.handlers.wsgi.WSGIHandler()
  return app_entry_point(environ,request_response)