2011-03-15 21 views
0

Django已在Apache的Apache mod_wsgi實現上運行了一段時間(在Windows 7 x64上)。這是一個巨大的痛苦,因爲必須實際手動修改註冊表值才能正確安裝,並讓Django使用與我所有其他應用程序相同的MySQL安裝。我還必須通過雙轉義括號(Program Files(x86))來修改PATH變量,因爲它們正在使用批處理文件。但這主要是微軟的錯,而且我很亂。Django在域根下面的目錄中設置WSGI:模板中的Url問題

這是我的問題: URLCONF和視圖中使用的所有URL都能正常工作。當我試圖處理站點根URL時,唯一不在模板中的是。我正在運行一個開發服務器,我有兩個Django站點,這個站點是www.example.com/testing。

在模板中,如果我只是將「/」放在< a>中,那麼它將指向www.example.com/,而不是www.example.com/testing/。我已經閱讀了這個話題,但這個問題沒有解決,因爲這張海報很固執。我張貼在下面的httpd.conf中我WSGI配置:

 
Listen 127.0.0.1:8001 
VirtualHost *:8001 > 
    ServerName ****.net/testing 
    ServerAdmin *******@gmail.com 
    ErrorLog ********.log 

    WSGIScriptAlias /testing ****/htdocs/testing/apache/django.wsgi 

    Directory ****/htdocs/testing/apache > 
     Order deny,allow 
     Allow from all 
    /Directory> 
    Location "/media"> 
     SetHandler None 
    /Location> 
/VirtualHost> 

注:所有的「<」省略這樣的標籤將顯示

這裏是在上述目錄中的文件django.wsgi:

 
import sys 
import os 

sys.path.insert(0, '*****/Django/') 
sys.path.insert(0, '*****/htdocs/') 
sys.path.insert(0, '*****/htdocs/testing') 
sys.path.insert(0, '*****/htdocs/testing/apache') 

os.environ['DJANGO_SETTINGS_MODULE'] = 'testing.settings' 

import django.core.handlers.wsgi 
application = django.core.handlers.wsgi.WSGIHandler() 

import testing.monitor 
testing.monitor.start(interval=1.0) 

我有一個Nginx前端,它將來自testing /的任何非靜態文件傳遞給8001,以便Apache使用此虛擬主機。

如果我省略了django.wsgi文件中的根「htdocs /」行,那麼我只會在網站上發現500個錯誤。另外,如果我使用相對於當前URL的URL形式(即「example /」而不是「/ example /」),那就行了。但是,如果我添加最初的「/」以將URL從根目錄中刪除,它將使其脫離「www.example.com」,而不是像我想要的那樣「www.example.com/testing」。

很抱歉,這篇很長的文章,但我想盡可能清楚。感謝您的時間。

回答

2

這就是爲什麼你不應該在你的模板中硬編碼URL。當然/會帶你到網站的根,而不是你的應用的根 - 這就是它應該做的。

相反,給你的根在你的URLconf查看名稱:

urlpatterns = patterns('', 
    url('^$', 'myapp.views.index', name='home') 
) 

現在在你的模板,你可以這樣做:

<a href="{% url home %}">Home</a> 

,這將正確解析到/testing/

+0

好吧。這是一個簡單的解決方案。它工作得很好。我想我對Django和Python一般來說還是很新的。我認爲很難得到一個解決方案,其中不包括將名稱「測試」放在某個地方,降低了可移植性。非常感謝您的幫助! – 2011-03-15 17:04:22