2010-07-26 94 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