Django URL Config

Django, Flask, Bottle, WSGI, CGI…
Antworten
chrjs
User
Beiträge: 15
Registriert: Sonntag 24. Oktober 2010, 20:15

Hallo Zusammen,

nach dem ich nun eine halbe Ewigkeit mit Apache und mod_wsgi gekämpft habe, funktioniert das nun anscheienend so weit, dass er erkennt, welches Directory er per wsgi/django ansteuern soll. (Hab durch die Architektur noch nicht so ganz durchgeblickt.) Ich bin hierfür nach diesem Tutorial vorgegangen: http://blog.stannard.net.au/2010/12/11/ ... ntu-10-04/

Das Problem ist nun folgendes.
Meine urls.config funktioniert Lokal wunderbar über 127.0.0.1:8000/Quotes/

Wenn ich das ganze nun auf meinem Server ansehen möchte über meineurl.de/Quotes funktioniert es nicht.

Code: Alles auswählen

Page not found (404)
Request Method:	GET
Request URL:	http://meineurl.de/Quotes/

Using the URLconf defined in Quotes.urls, Django tried these URL patterns, in this order:
^Quotes/$
^Quotes/search/$
^Quotes/admin/
^static/(?P<path>.*)$
^Quotes/(?P<quote_id>\d+)/$
The current URL, , didn't match any of these.
Da hängt es bei mir leider.

Meine sites-enabled/quotes Datei sieht wie folgt aus:

Code: Alles auswählen

<VirtualHost *:80>
 
    ServerName meineurl.de
    DocumentRoot /srv/www/Quotes
 
    <Directory /srv/www/Quotes>
        Order allow,deny
        Allow from all
    </Directory>
 
    WSGIDaemonProcess chris processes=2 threads=15 display-name=%{GROUP}
    WSGIProcessGroup chris
    WSGIScriptAlias /Quotes /srv/www/Quotes/apache/django.wsgi
</VirtualHost>
Ein weiteres (kleineres) Problem, ist die Tatsache, dass wenn ich http://www.meineurl.de/Quotes (mit www.) ansurfe kommt ein normaler 404 Error, nicht der von Django. Das liegt wohl, wie ich heraus gefunden habe am ServerName. Welche Änderung muss ich tätigen, dass ich sowohl mit www. als auch ohne www. die selbe Seite ansurfe?

Danke im Voraus.

Gruß,
Chris
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

chrjs hat geschrieben:

Code: Alles auswählen

<VirtualHost *:80>
 
    ServerName meineurl.de
    [...]
</VirtualHost>
Welche Änderung muss ich tätigen, dass ich sowohl mit www. als auch ohne www. die selbe Seite ansurfe?

Code: Alles auswählen

<VirtualHost *:80>
    ServerName meineurl.de
    ServerAlias www.meineurl.de
    [...]
</VirtualHost>
chrjs
User
Beiträge: 15
Registriert: Sonntag 24. Oktober 2010, 20:15

Danke, das funktioniert schon mal. Jetzt geht es nur noch um das eigentliche Problem. ;)
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

chrjs hat geschrieben:Danke, das funktioniert schon mal. Jetzt geht es nur noch um das eigentliche Problem. ;)
Ja dann. Ich finde die Angabe "WSGIScriptAlias /Quotes /srv/www/Quotes/apache/django.wsgi" ungewöhnlich. Ich mappe eigentlich immer auf das Root-Verzeichnis.
chrjs
User
Beiträge: 15
Registriert: Sonntag 24. Oktober 2010, 20:15

Ah, so funktioniert es.

Jetzt hab ich nur das Problem, dass wenn ich www.meineurl.de aufrufe einen Django 404 Error bekomme. Mein Ziel ist es eigentlich für jedes "Projekt" einen Unterordner anzulegen, wo auch nur das jeweilige "Projekt" ausgeführt wird...

Z.b
www.meineurl.de/blog -> Wordpress
www.meineurl.de/Quotes -> Quotes
www.meineurl.de/Short -> Linkskürzen
www.meineurl.de -> Irgendeine Übersichtsseite z.B
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Naja, dann musst du das "Quotes" am Anfang deiner URL-Conf entfernen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
chrjs
User
Beiträge: 15
Registriert: Sonntag 24. Oktober 2010, 20:15

Dann gibt es doch aber das Problem, dass die url www.meineurl.de/Quotes nicht in der URL Config drin ist.

Code: Alles auswählen

Page not found (404)
Request Method:	GET
Request URL:	http://meineurl.de/Quotes/
Using the URLconf defined in Quotes.urls, Django tried these URL patterns, in this order:
^/$
^/search/$
^/admin/
^static/(?P<path>.*)$
^/(?P<quote_id>\d+)/$
The current URL, Quotes/, didn't match any of these.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ja, jetzt musst du natürlich den WSGIScriptAlias auf den vorherigen Wert zurücksetzen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
chrjs
User
Beiträge: 15
Registriert: Sonntag 24. Oktober 2010, 20:15

Warscheinlich verstehe ich es nicht so ganz.

Also, meine urls.py sieht so aus:

Code: Alles auswählen

urlpatterns = patterns('',
    (r'^/$', views.all_quotes),
    (r'^/search/$', views.quote_search),
    (r'^/admin/', include(admin.site.urls)),
    (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
    url(r'^/(?P<quote_id>\d+)/$', views.entry_detail)
Und die wsgi Zeile sieht nun so aus:

Code: Alles auswählen

 WSGIScriptAlias /Quotes /srv/www/Quotes/apache/django.wsgi
So habe ich es verstanden.

Nun bekomme ich allerdings wenn ich www.meineurl.de/Quotes aufrufe wieder den Django 404 Error.

Code: Alles auswählen

Page not found (404)
Request Method:	GET
Request URL:	http://meineurl.de/Quotes/
Using the URLconf defined in Quotes.urls, Django tried these URL patterns, in this order:
^/$
^/search/$
^/admin/
^static/(?P<path>.*)$
^/(?P<quote_id>\d+)/$
The current URL, , didn't match any of these.
BlackJack

@chrjs: Welches Muster sollte denn Deiner Meinung nach hier greifen? Häng an die URL mal einen / an, *dann* sollte das erste Muster zutreffen.
chrjs
User
Beiträge: 15
Registriert: Sonntag 24. Oktober 2010, 20:15

Damit lande ich auch wieder beim 404 Error.

Was meinst du mit 'welches Muster soll greifen'?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

The current URL, , didn't match any of these.
Das zwischen den Kommas ist das was er als "Pfad" matcht. Es gibt bei dir in deiner URLconf aber keine Regel die leere Strings matcht, nur welche die mit einem Slash anfangen. Daher der Fehler.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
chrjs
User
Beiträge: 15
Registriert: Sonntag 24. Oktober 2010, 20:15

Ah, okay. Danke. :)
Antworten