2014-03-02 32 views
0

我在我的應用程序中有2(類似)路線。一個是頁面上有單個圖像,另一個是頁面上有多個圖像。用來做一個獨特的URL中的變量只是隨機生成的routing_id(單個圖像頁)爲7個字符和gallery_routing是6 的路線是這樣的:Flask-weird路由和URL錯誤?

@app.route('/<routing_id>') 
def display_image_page(routing_id): 
    stuff 
    return render_template("image-page.html", template variables go here) 

@app.route('/<gallery_routing>') 
def display_gallery(gallery_routing): 
    other stuff 
    return render_template("gallery-page-vertical.html", other template vars) 

在調用他們,他們是功能

url_for('display_image_page', routing_id=routing_id) 

url_for('display_gallery', gallery_routing=gallery_routing) 

在測試我的應用程序,如果我試圖訪問這些網址,我得到奇怪的錯誤,就像從本不應該甚至被當該URL運行的函數得到一個數據庫錯誤:像任何其他URL生成訪問過,或者只是簡單的404s。這些URL映射到的只是一些函數,它們會執行一些操作並返回render_template。如果我更改URL一點通過增加一個尾部斜槓第一位的,而另一對夫婦斜線的,第二個(沒有尾隨斜線)之前的一些文本規則了,然後他們完美地工作:

@app.route('/<routing_id>/') 

@app.route('/arbitrary_text/<gallery_routing>') 

什麼甚至在這裏?我不直接訪問文件,只是在其上顯示文件的頁面,所以斜槓爲什麼會改變內容?我不希望在這兩者中的任何一個上出現斜線,也不希望在我的gallery_routing之前有另一個子目錄。我在我的應用程序大約3等航線,這只是爲了看起來像靜態頁面:

@app.route('/info') 
@app.route('/thanks') 

他們都做工精細。我看到的與那些不工作的唯一變化是url規則中的一個變量。如果它有所作爲,我使用不同路由的子域(即實際映像文件的鏈接),並使用自定義服務器名稱,因此我正在訪問應用程序http://local.dev:5000/,但我不看不出這會改變什麼?我已閱讀關於構建網址的文檔,但找不到任何幫助。謝謝。

回答

1

當您說@app.route('/<routing_id>')@app.route('/<gallery_routing>')時,您嘗試在不同視圖中管理相同的網址格式。

看:

/abracadabra -> /<routing_id> 
    ---> routing_id = abracadabra 
/abracadabra -> /<gallery_routing> 
    ---> gallery_routing = abracadabra 

軟件無法猜測你的意思

當然,這個工作

@app.route('/<routing_id>/') 
@app.route('/arbitrary_text/<gallery_routing>') 

因爲

/arbitrary_text/abracadabra -> /<routing_id> 
    -x-> routing_id = abracadabra 
/arbitrary_text/abracadabra -> /arbitrary_text/<gallery_routing> 
    ---> gallery_routing = abracadabra 

沒什麼奇怪