我最近偶然发现的一个问题,即使我解决了它,我也想听听您对正确/简单/采用的解决方案的看法。
我正在使用 Django + python 开发网站。当我使用“python manage.py runserver”在本地机器上运行它时,本地地址默认为http://127.0.0.1:8000/。
但是,在生产服务器上,我的应用程序有其他 url,带有路径 - 例如“ http://server.name/myproj/ ”
我需要生成和使用永久网址。如果我使用 {% url view params %},我会得到相对于 / 的路径,因为我的 urls.py 包含这个
urlpatterns = patterns('',
(r'^(\d+)?$', 'myproj.myapp.views.index'),
(r'^img/(.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT + '/img' }),
(r'^css/(.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT + '/css' }),
)
到目前为止,我看到了 2 个解决方案:
- 修改 urls.py,在生产运行的情况下包括“/myproj/”
- 用于
request.build_absolute_uri()
在views.py中创建链接或在模板中传递一些带有“主机名:端口/路径”的变量
有没有更漂亮的方法来处理这个问题?谢谢你。
更新:嗯,问题似乎不在于 django,而在于配置 wsgi 的 webfaction 方式。具有 URL“hostname.com/myapp”的应用程序的 Apache 配置包含以下行
WSGIScriptAlias / /home/dreamiurg/webapps/pinfont/myproject.wsgi
因此,SCRIPT_NAME 是空的,我看到的唯一解决方案是访问 mod_python 或从根目录提供我的应用程序。有任何想法吗?