Configurez django sur le sous répertoire

Ce que j’ai:

Apache http server avec 4 serveurs virtuels avec des domaines de distinc:

www.mydomain.com points to /var/www/mydomain/htdocs (php code) 

et il fonctionne. Tous les autres domaines ne sont pas pertinents.

Sur une autre machine, j’ai conçu un projet django avec deux applications et cela fonctionne bien avec le serveur intégré du django.

Ce dont j’ai besoin:

 www.mydomain.com pointing to /var/www/mydomain/htdocs (php code) www.mydomain.com/recsys pointing to /opt/repsys (django code) 

Je veux garder le code PHP sur root et installer django inside / repsys.

Je peux mettre mon code django sur root mais quand j’essaye de mettre / repsys j’ai deux problèmes:

  • J’ai dû mettre / repsys sur toutes les URL de mon fichier settings.py (ce n’est pas un problème mais c’est bizarre pour moi)
  • Et j’ai cette erreur du code django:

    Inverser pour ‘ajax’ avec les arguments ‘(u’viewproject’,) ‘et les arguments de mots clés’ {} ‘introuvable

Je peux voir que cela est dû au changement d’url (maintenant il inclut / repsys) et django ne sait pas comment inverser cette url, mais je n’ai aucune idée de la façon de résoudre ce problème …

Mon django est: 1.5.1

Voici mon wsgi.py

 import os, sys sys.path.append('/opt/repsys') os.environ.setdefault("DJANGO_SETTINGS_MODULE", "repsys.settings") from django.core.wsgi import get_wsgi_application application = get_wsgi_application() 

et mon fichier de configuration apache pour ce serveur virtuel:

 LoadModule wsgi_module modules/mod_wsgi.so WSGISocketPrefix /var/run/wsgi #WSGIPythonPath /opt/repsys/  WSGIDaemonProcess repsyssite display-name=%{GROUP} WSGIProcessGroup repsyssite ServerAdmin [email protected] ServerName www.mydomain.com DocumentRoot "/var/www/mydomain/htdocs" WSGIScriptAlias /reprep /opt/repsys/repsys/wsgi.py Alias /reprep/static /opt/repsys/static_serve Alias /reprep/media /opt/repsys/media Alias /admin_media /home/myuser/Django-1.5/django/consortingb/admin/media  Order allow,deny Allow from all  # Logfiles ErrorLog /var/www/logs/glob/error.log CustomLog /var/www/logs/glob/access.log combined  

Mon url.py principal comprend:

 url(r'^report/', include('report.urls', namespace="report")), 

Et mon rapport / url.py comprend:

 url(r'^(?P\w+)/ajax/$', views.ajax, name='ajax'), 

Et voici la ligne qui fonctionne lorsque je mets mon projet à la racine, mais échoue dans un sous-dossier:

 $('#viewreportdiv').load("{% url 'report:ajax' 'viewproject' %}", {proj: id}); 

Quelqu’un peut-il indiquer comment résoudre ce problème?

Je ne suis pas sûr que vous cherchiez toujours une réponse à cette question, mais j’ai finalement réussi à le faire fonctionner, alors je pensais le poster ici.

J’ai pu résoudre ce problème en utilisant l’article que Graham Dumpleton a publié à l’adresse http://blog.dscpl.com.au/2012/10/requests-running-in-wrong-django.html

Au final, mon fichier /etc/httpd/conf.d/django.conf ressemblait à ceci

 LoadModule wsgi_module modules/mod_wsgi.so WSGIDaemonProcess mysite python-path=/var/www/html/mysite:/var/www/html/mysite/venv/lib/python2.7/site-packages WSGISocketPrefix run/wsgi WSGIScriptAlias /mysite /var/www/html/mysite/mysite_www/wsgi.py process-group=mysite Alias /static/ /var/www/html/static/ Alias /docs/ /var/www/html/mysite/docs/_build/html/   Allow from all Order deny,allow   

Ici, je me sers du sous-répertoire Apache spécifié via WSGIScriptAlias , plutôt que d’utiliser .

De là, je peux accéder à mes pages php via: http://myserver.com/ et sur le site django sur http://myserver.com/mysite/ .

Notez que je devais utiliser la barre oblique lors de la navigation vers Django (1.7), sinon je serais sur la page principale, mais les inversions d’URL dans mon modèle ne seraient pas gérées correctement pour accéder aux pages enfants.