Javascript 使用Django/Django.js和WSGIScriptAlias反转URL

Javascript 使用Django/Django.js和WSGIScriptAlias反转URL,javascript,django,url,Javascript,Django,Url,我的django项目在我的生产环境中遇到了问题。当我为“WSGIScriptAlias”apache指令使用别名时,看起来我的反向URL有问题。事实上,问题可能与模块有关,因为它似乎没有考虑“WSGIScriptAlias” 下面是我的apache配置: <VirtualHost *:80> DocumentRoot /MyPath/django_proj/pti/pti WSGIScriptAlias /pti /MyPath/django_proj/pti/pti

我的django项目在我的生产环境中遇到了问题。当我为“WSGIScriptAlias”apache指令使用别名时,看起来我的反向URL有问题。事实上,问题可能与模块有关,因为它似乎没有考虑“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>
这部分似乎很好用。但当我使用fonction获取数据时,问题就来了。以下是我的url的pti_映射配置文件,其中存储了我的数据:

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反向URL函数
Django.url('pti\u map:ptinovelle')
是:

http://MyServer/pti_map/ptinouvelle.geojson

而不是我所期望的:

http://MyServer/pti/pti_map/ptinouvelle.geojson

我可以确认“django.js”似乎没有考虑我的WSGIScriptAlias。下面是我的
console.log(Django.url)
的结果:

如果我想让它工作,我必须在JS文件中硬编码WSGIScriptAlias:

var url=“/pti”+Django.url('pti\u map:ptinovelle')

通过在URL的开头添加“/pti”,我可以获得我的数据,但这是一个丑陋的黑客行为,它破坏了我与开发平台的兼容性

你知道我怎样才能解决这个问题吗

谢谢


Arnaud

这仅仅是因为您的Django应用程序不知道您的web服务器正在进行的重写或路由,这超出了它的范围

您可能已经进行了别名处理,因为您希望在其他路径上承载其他内容。如果是这种情况,那么您可以做的是,您可以在内部将请求路由到/pti_映射到/pti_映射/pti_映射,并使用别名/pti_映射到脚本

在将请求路由到脚本时,wsgi容器将吃掉第一个“pti_映射”,并转发下一个

希望我理解正确

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"),
)
pti_map:ptiencours "/pti_map/ptiencours.geojson"

pti_map:ptinouvelle "/pti_map/ptinouvelle.geojson"

pti_map:ptiretrait "/pti_map/ptiretrait.geojson"