1. 包含其他 URLconf
应用程序基于多个django站点,应该考虑到URLConfig包含【include】的方式来处理urls。
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^weblog/', include('mysite.blog.urls')),
(r'^photos/',
include('mysite.photos.urls')),
(r'^about/$', 'mysite.views.about'),
)
重要的地方:指向 include() 的正则表达式并不包含一个 $ (字符串结尾匹配符),但是包含了一个斜杆。每当 Django 遇到 include()
时,它将截断匹配的URL,并把【剩余】的字符串发往被包含的 URLconf
作进一步处理。
被包含的 URLconf mysite.blog.urls :
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^(\d\d\d\d)/$',
'mysite.blog.views.year_detail'),
(r'^(\d\d\d\d)/(\d\d)/$',
'mysite.blog.views.month_detail'),
)
当请求:/weblog/2011/ 时,首先是
(r'^weblog/', include('mysite.blog.urls'))匹配/weblog/ , 由于使用include,正则停止匹配,并将
2011/发送到mysite.blog.urls中;
(r'^(\d\d\d\d)/$', 'mysite.blog.views.year_detail') 可以匹配 2011/ ,于是将执行
mysite.blog.views.year_detail 视图,并传递参数 2011
2. 捕获的参数如何和include()协同工作
一个被包含的URLconf 接收任何来自parent
URLconfs 的被捕获的参数,比如:
# root urls.py
from django.conf.urls.defaults
import *
urlpatterns = patterns('',
(r'^(?P<username>\w+)/blog/', include('foo.urls.blog')),
)
#
foo/urls/blog.py
from django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^$', 'foo.views.blog_index'),
(r'^archive/$', 'foo.views.blog_archive'),
)
在这个例子中,被捕获的
username 变量将传递给被包含的 URLconf,进而传递给那个
URLconf 中的 每一个 视图函数。
注意,这个被捕获的参数 总是
传递到被包含的URLconf 中的 每一
行,不管那些行对应的
视图是否需要这些参数。因此,这个技术只有在你确实需要那个被传递的参数的时候才显得
有用。
3. 额外的URLconf如何和include()协同工作
相似的,你可以传递额外的 URLconf 选项到
include() , 就像你可以通过字典传递额外的URLconf 选项到普通的视图。当你这样做的时候,被包含 URLconf 的 每一
行都会收那些额外的参数。 比如,下面的两个 URLconf 在功能上是相等的。
# urls.py
from
django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^blog/', include('inner'), {'blogid': 3}),
)
# inner.py
from
django.conf.urls.defaults import *
urlpatterns = patterns('',
(r'^archive/$', 'mysite.views.archive'),
(r'^about/$',
'mysite.views.about'),
(r'^rss/$', 'mysite.views.rss'),
)
相关推荐
在Django框架中,配置多站点多域名是一项实用的功能,尤其对于那些需要为不同业务或应用分配独立域名的开发者来说。本篇文章将详细介绍如何通过`django-hosts`扩展包实现这一功能。 首先,我们需要安装`django-...
第二章“Django配置”涵盖了多个关键方面,包括项目的配置文件、基本配置、模板配置、数据库配置以及静态资源配置。 Django项目的配置文件是`settings.py`,它在使用`django-admin startproject`命令创建项目时自动...
【Django Polls 案例详解】 Django Polls 是一个经典的教程项目,它用于引导初学者了解 Django 框架的基本...这只是一个起点,Django 还提供了更多的高级特性,如中间件、自定义管理站点、用户认证等,等待你去探索。
Django最初是为了满足新闻站点的需求而创建的,因此在处理高流量网站方面具有天然的优势。 #### 二、Django框架的特点 1. **自动化的管理后台**:Django提供了一个自动化的管理界面,可以根据定义的数据模型自动...
- **激活管理站点**:Django内置了一个强大的管理站点,可以通过简单的配置让模型变得可管理。一旦模型被注册,管理站点将自动提供一个用于增删改查的界面。 - **自定义管理功能**:除了基本的CRUD操作,开发者还...
1. Django安装与环境配置: 在开始开发之前,确保已经安装了Python,并使用pip工具安装Django。在命令行中运行`pip install django`即可。创建一个虚拟环境以隔离项目依赖,可以使用`python -m venv myenv`创建虚拟...
在Django中,一个项目可以包含多个应用,每个应用专注于特定的功能。对于投票应用,我们可以创建一个名为"polls"的应用。在项目根目录(即含有manage.py的目录)下,运行`python manage.py startapp polls`命令。这...
在Django这个强大的Web开发框架...通过以上步骤,你可以在Django的Admin站点中有效地管理和操作多个模型,实现更灵活的后台管理界面。不断学习和实践Django的Admin功能,可以极大地提高开发效率,使项目管理更加便捷。
### 使用Django与Python开发Web站点:从零到精通 #### 概述 Django作为一款高生产力的Python Web框架,旨在通过减少开发时间和简化复杂度来加速Web应用的开发。该框架源于一个在线新闻网站的开发实践,在2005年以...
from django.urls import path from . import views urlpatterns = [ path('upload/', views.upload_image, name='upload_image'), ] ``` 6. **Layui上传配置**: 如果你希望在前端实现异步上传,可以使用...
### Django基础认识详解 #### 一、为什么选择Django? Django是一款强大的开源Web框架,基于Python语言构建,被广泛应用...这只是一个非常基础的例子,但通过这种方式,你可以逐步深入学习Django框架的更多高级特性。
通常,一个Django项目的文件结构会包含`manage.py`(项目管理脚本)、`settings.py`(项目配置)、`urls.py`(URL配置)、`views.py`(视图函数)等关键文件,以及`apps`目录(包含各个应用模块)和`templates`目录...
在入门教程中,我们会学到如何配置URLs,使用视图函数和快捷函数,以及如何使用装饰器。除此之外,还有内建视图的介绍、文件上传的处理、基于类的视图的高级应用,例如生成CSV和PDF文件。中间件则在请求和响应处理...
4. URLs(URL配置):通过URL配置,你可以将特定的URL映射到相应的视图函数。理解URLconfs的结构和工作原理是必要的。 5. Forms(表单):Django提供了一套强大的表单处理机制,用于处理用户输入。学习如何创建表单...
from django.conf.urls import url from django.contrib.sitemaps import GenericSitemap from django.contrib.sitemaps.views import sitemap from blog.models import Entry sitemaps = { 'blog': ...
- `urls.py`:路由配置文件,定义URL到视图函数的映射规则。 - **应用目录结构解析**:分析应用目录中的主要文件及其功能。 - `models.py`:定义数据模型。 - `views.py`:处理业务逻辑。 - `templates`:存放...
2. **django.core.urlresolver错误**:在Django的早期版本到2.x的升级过程中,url解析器的模块路径发生了变化,从`django.core.urlresolvers`更改为`django.urls.resolvers`。xadmin2.0 for Django2.x已经适应了这个...