10

我的代理(nginx 公共端口 80)到 django(gunicorn wsgi localhost 端口 8000)剥离了应用程序“/app”的路径,因此 requests forhttp://server/app/hello显示为 django as/hello并且 requests forhttp://server/app/admin显示为 django as /admin

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

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

4

2 回答 2

17

请参阅 FORCE_SCRIPT_NAME 的文档:

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

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

于 2012-05-31T02:50:35.797 回答
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)
于 2013-09-01T18:54:25.983 回答