我的生产环境中的django项目出了问题。当我使用“WSGIScriptAlias”apache指令的别名时,看起来我的反向URL有问题。事实上,问题可能与django.js模块有关,因为它似乎没有考虑到“WSGIScriptAlias”。
所以,这是我的apache配置:
<VirtualHost *:80>
DocumentRoot /MyPath/django_proj/pti/pti
WSGIScriptAlias /pti /MyPath/django_proj/pti/pti/pti_project/wsgi.py
WSGIDaemonProcess pti python-path=/MyPath/django_proj/pti/pti:/MyPath/django_proj/pti/lib/python2.7/site-packages
WSGIProcessGroup pti
Alias /media/ /MyPath/django_proj/pti/pti/media_root/
Alias /static/ /MyPath/django_proj/pti/pti/static_root/
ErrorLog /var/log/apache2/pti-error_log
<Directory /MyPath/django_proj/pti/pti/pti_project/>
<Files wsgi.py>
Allow from all
</Files>
</Directory>
<Directory /MyPath/django_proj/pti/pti/static_root/>
Order deny,allow
Allow from all
</Directory>
<Directory /MyPath/django_proj/pti/pti/media_root/>
Order deny,allow
Allow from all
</Directory>
正如您所看到的,我的WSGIScriptAlias是“/ pti”。
我的django网址是:
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'pti_project.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^djangojs/', include('djangojs.urls')),
url(r'^pti_core/', include('pti_core.urls', namespace='pti_core', app_name='pti_core')),
url(r'^pti_map/', include('pti_map.urls', namespace='pti_map', app_name='pti_map')),
)
这部分似乎工作正常。但是当我使用url's reverse django.js函数来获取我的数据时,问题出现了。这是我的url的pti_map配置文件,我的数据存储在:
urlpatterns = patterns('pti_map.views',
url(r'^$', 'map_index', name='map_index'),
url(r'^ptiretrait.geojson$', MapLayer.as_view(model=PtiRetrait), name='ptiretrait'),
url(r'^ptiencours.geojson$', MapLayer.as_view(model=PtiEnCours), name='ptiencours'),
url(r'^ptinouvelle.geojson$', GeoJSONLayerView.as_view(model=PtiNvlleDetection, precision = 5, simplify=0.5, properties = ('etat', 'friche', 'age', 'acces', 'culture', 'bati', 'voisinage', 'defrichement', 'mecanisable', 'irrigable', 'commentaire')), name='ptinouvelle'),
url(r'^newptisubmit$', 'newptisubmit', name='newptisubmit'),
url(r'^newptiedit$', 'newptiedit', name='newptiedit'),
url(r'^newptimodifygeom$', 'newptimodifygeom', name='newptimodifygeom'),
url(r'^ptiTable$', 'ptiTable', name='ptiTable'),
url(r'^sendEmail$', 'sendEmail', name='sendEmail'),
url(r'ajax_file_upload$', 'ajax_file_upload', name="ajax_file_upload"),
)
当我尝试使用此功能获取反向URL时,似乎没有考虑到我的WSGIScriptAlias。所以使用django.js反向urls函数,结果为
Django.url('pti_map:ptinouvelle')
是:
http://MyServer/pti_map/ptinouvelle.geojson
而不是我期望的那个:
http://MyServer/pti/pti_map/ptinouvelle.geojson
我可以确认“django.js”似乎没有考虑到我的WSGIScriptAlias。这是我的console.log(Django.urls)
:
pti_map:ptiencours "/pti_map/ptiencours.geojson"
pti_map:ptinouvelle "/pti_map/ptinouvelle.geojson"
pti_map:ptiretrait "/pti_map/ptiretrait.geojson"
如果我想让它工作,我必须在我的JS文件中硬编码WSGIScriptAlias:
var url = "/pti" + Django.url('pti_map:ptinouvelle')
通过在URL的开头添加“/ pti”,我可以获取我的数据,但这是一个丑陋的黑客攻击,它破坏了我与开发平台的兼容性。
你知道如何解决这个问题吗?
感谢。
阿诺
答案 0 :(得分:0)
这只是因为您的Django应用程序不知道您的Web服务器正在进行的重写或路由,它超出了它的范围。
您可能已经完成了别名,因为您想要在其他路线上托管其他内容。如果是这种情况那么你可以做的是,你可以在内部将请求/ pti_map路由到/ pti_map / pti_map并使用别名/ pti_map到你的脚本。
在将请求路由到脚本时,这会做什么,wsgi容器将占用第一个“pti_map”并转发下一个。
希望我能正确理解你。