2010-07-26 89 views
0

所以我和Django一起工作了一下,理解了一些基本的正則表達式。Django網址conf

我知道是否有請求「映射」(不知道是什麼意思)的網址到視圖中的某個定義。

這對於一個頁面來說是清楚易懂的。 但是,如果我想爲多個頁面和/或整個網站設計一個urlpattern,該怎麼辦? 我不理解那部分。

有沒有辦法做到這一點,沒有正則表達式? 如果不是:用正則表達式創建健壯結構的方法是什麼? 我可以在哪裏添加和快速刪除頁面。

在這方面,其他頁面的頁面有什麼不同?

如果這是可能的和合理的,我想實現以下與我的urls.py?

  1. 的flatpages對於通常的網站一個網站需要:

首頁 關於 媒體 。 。 。 聯繫

內的類似於Webgallery(但不是)
  • 動態創建的網站
  • 當第一個站點上我有文本和一些複選框。 然後在每個頁面上都有一個媒體項目,並帶有下一個按鈕。

    網址,可能會是這樣的

    的myapp /開始/

    然後

    的myapp /開始/ 1到n

    版和MyApp /是在主導航和簡單頁面。

    我用來做靜態頁面,我不知何故不知道如何可以得到一個結構到這些不同的頁面。看起來,頁面是靜態的。所以我可以更輕鬆地工作。但也許以後我會用這種方法遇到問題。

    如果有什麼好的方法來快速理解正則表達式或如何在Django中創建網站結構:請告訴我。

    謝謝!

    回答

    2

    在urls.py中,您並非真正將URL映射到頁面,而是將URL映射到可呈現頁面的函數。您可以將多個URL映射到同一個函數,並且如果需要,您可以根據URL返回不同的內容。

    所以,對於你的情況,你可能有一些看起來像

    (r'^myapp/$', 'myapp.show_main_navigtaion_page'), # if the url is "myapp/" only, show main nav 
    (r'^articles/start/$', 'myapp.show_start_page'), 
    (r'^articles/start/(\d+)/$', 'myapp.do_something_with_start'), 
    

    在這裏一些基本的正則表達式的東西: 「^」字是指URL的開始,「$」表示字符串的結尾, 「()」字符捕捉它們內部的任何內容, 「\ d +」匹配一個或多個數字。

    +0

    非常感謝!文章/開始/第1頁到第40頁如何創建?逐個?或者我可以用什麼來自動創建?分頁程序?那就是我不明白的地方。 – MacPython 2010-07-26 14:57:05

    +0

    文章/開始/ 1和文章/開始/ 40都與第三個正則表達式匹配,其中\ d,並且是在urls.py中具有上述內容的有效網址。你在問什麼? – 2010-07-26 19:19:28

    +0

    謝謝我嘗試了第3個正則表達式示例。 在視圖中做了一個簡單的Hello World HttpResponse,它沒有工作。 – MacPython 2010-08-02 08:31:58

    1

    你應該在應用程序分割你的網址:

    urlpatterns = patterns('', 
        (r'^accounts/', include('my.accounts.urls')), 
        (r'^gallery/', include('my.gallery.urls')), 
    

    然後你就可以使用正則表達式創建結構:

    urlpatterns = patterns('my.gallery.views', 
        (r'^photos/new/$', 'photo_new'), 
        (r'^photos/$', 'photo_list'), 
        (r'^photos/by_user/(?P<user_id>\d+)/$', 'photo_list'), # capture (\d+) into user_id variable 
        (r'^photos/by_category/(?P<cat_id>\d+)/$', 'photo_list'), 
    ) 
    

    我用photo_list三次,因爲它接受可選參數(USER_ID和CAT_ID )。它看起來像這樣:

    def photo_list(request, cat_id=None, user_id=None): 
    if cat_id is not None: 
        c = get_object_or_404(Category, pk=cat_id) 
        q = c.photo_set.all() 
    elif user_id is not None: 
        u = get_object_or_404(User, pk=user_id) 
        q = u.photo_set.all() 
    else: 
        q = Photo.objects.all() 
    return render_response(request, "gallery/photo_list.html",{ 
        "photos":q}) 
    
    +0

    非常感謝! 廣告第一塊代碼: 包含什麼? 第二個區塊: (?P \ d +)可以映射像hans/1,hans/2等網址但不是hans/1a的網址嗎? 廣告第三塊: get_object_or_404是一個django構建函數? 再次感謝 – MacPython 2010-07-26 14:50:04

    +0

    ad 1)它包含項目子目錄中的urls文件。一個例子是文件編號。 2 ad 2)是。更多閱讀http://docs.python.org/howto/regex.html 3)是的,它在django.shortcuts中定義 – joozek 2010-07-29 12:54:01