gpt4 book ai didi

javascript - 使用 Django/Django.js 和 WSGIScriptAlias 进行 URL 反向

转载 作者:行者123 更新时间:2023-12-02 04:52:26 26 4
gpt4 key购买 nike

我的生产环境中的 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 URL 是:

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”我可以获得我的数据,但这是一个丑陋的 hack,它破坏了我与我的开发平台的兼容性。

你知道我该如何解决这个问题吗?

谢谢。

阿诺

最佳答案

这仅仅是因为您的 Django 应用程序对您的 Web 服务器正在执行的重写或路由一无所知,这超出了它的范围。

您可能已经使用了别名,因为您还想在其他路由上托管其他东西。如果是这种情况,那么您可以做的是,您可以在内部将对/pti_map 的请求路由到/pti_map/pti_map 并将别名/pti_map 用于您的脚本。

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

希望我理解正确。

关于javascript - 使用 Django/Django.js 和 WSGIScriptAlias 进行 URL 反向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26686251/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com