Django一个比较隐含的函数url

本文介绍Django框架中URL函数的应用技巧,包括如何利用URL函数简化链接管理和更新过程,提高开发效率。通过实例展示了在视图和模板中正确使用URL函数的方法。
Django下有一个比较隐含的函数url,在django/conf/urls/defaults模块中,虽然只有短短的10行代码,但功能却很了得。起初初学Django,并没有发现它,Templates的链接地址都是根据urlpatterns定义的地址,拼凑成地址字符串,很难看,而且Templates里拼凑成的地址,随着页面的增加而不断增加,一旦在urlpatterns里的某个地址改变了叫法,那眼泪可是哗哗的,有多少的拼凑的地址就得改动多少处!这时发现了url函数,这下可都好了,不管urlpatterns里的某个地址叫法怎么改变,Templates里的地址都不用修改了。
比如没有采用url函数的时候:
urlpatterns里定义了资讯的首页地址,
urlpatterns = patterns('',    
    (r'^article$','news_index' ),
 )
Templates里的html为
资讯 
而且不止一个页面,可能有10个页面使用到资讯的链接,这时你的Templates上就会有10个那样的页面a标签,当有一天,你突然想改变地址的叫法,
urlpatterns = patterns('',    
    (r'^news$','news_index' ),
 )
你会发现,你在Templates中得修改10个
资讯

资讯
 可恨的是那样的标签分布在不同的页面上,
有更糟糕的时候就是 你不知道到底有多少个那样的a标签(总不能一个个数嘛)。


有了url情况就大为不一样了,
urlpatterns里定义了资讯的首页地址,
urlpatterns = patterns('',    
    url(r'^article$','news_index' ,name="news_index"),
 )
Templates里的html为
资讯 
你怎么修改urlpatterns的地址,Template都会随着改变,省事了不少。


url的用法也很简单,只要在urlpatterns里使用它,附加一个name,如:
url(r'^article$','news_index' ,name="news_index"),
Templates里 这样使用
{%url name%},
地址链接就能使用了。注意的是name是全局的,你整个urlpatterns里只能一个唯一的name,这个道理应该好理解,就像网站的地址也是唯一性的。
Templates里的用法简单,在views里怎么用呢?以前在没有使用的url函数的时候,可能指向一个地址使用 
HttpResponseRedirect("/article")
当然urlpatterns改变地址叫法的时候,所用的views的指向函数的参数都得跟着变。有了url函数,变成:
HttpResponseRedirect(reverse("news_index"))
好处和Template里使用的情形一样的。


当遇到urlpatterns的地址包含有参数的时候,如:
(r'^(?P \d{4})/(?P \d{1,2})/$','news_list' ),
有两个参数,最终的地址如归档的地址http://www.baoyalv.com/2010/02
情况变复杂点了,urlpatterns的以上的用法不变:
url(r'^(?P \d{4})/(?P \d{1,2})/$','news_list',name="news_archive" ),
Templates里的用法就需要改改了,我们把url看成一个方法,结合templates的语法,结果就出来了:
2010年02月 
后面的2010, 02 就是参数了,参数之间用逗号隔开,多少个参数用法都一样的。当然,2010 02 参数是某个实体获得的,具体的情况具体分析。而在views呢,有了参数怎么写,万变不离宗:
reverse("news_archive",kwargs={"year":2010,"month":02})
即可,最后解析出来的地址为“/2010/02”。

<script>window._bd_share_config={"common":{"bdsnskey":{},"bdtext":"","bdmini":"2","bdminilist":false,"bdpic":"","bdstyle":"0","bdsize":"16"},"share":{}};with(document)0[(getelementsbytagname('head')[0]||body).appendchild(createelement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new date()/36e5)];</script> 阅读(4573) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
<think>嗯,用户这次问的是如何使用Django开发简单的博客系统,正好和之前提供的两个引用内容高度相关。从引用[1]和引用[2]来看,用户可能是个刚接触Django的开发者,需要从零开始的实战指导。用户特意强调"简单"这个词,说明ta更关注核心功能的快速实现,而是复杂特性。注意到用户提到了"参考站内引用",但我的知识库并没有提供完整的教程链接。过引用[1]把开发步骤分成三节很清晰,引用[2]则补充了可扩展方向,这值得借鉴。上次回答的Django快速上手指南其实已经铺垫了基础知识,这次应该延续"核心功能优先"的思路。用户可能隐含的痛点是:想陷入Django繁杂的配置细节,渴望看到关键代码示例。ta真正需要的可能是完整项目,而是能立即运行的MVP(最小可行产品)。博客系统的核心无非是文章模型、管理员发布和前台展示这三块。考虑到用户的技术水平,回复要特别注意:-避免直接抛出抽象概念(如MVT模式),而是用具体操作带出概念-关键命令行必须标注解释(比如pythonmanage.pymigrate)-模型字段要选最基础的(先实现标题/内容/时间戳)-模板部分给出最简示例即可,避免引入静态文件配置-扩展功能用列表呈现,降低认知压力上次给出的快速排序代码示例很受用,这次也应该用同样方式展示视图函数和模板的联动。特别要提醒用户db.sqlite3这个默认数据库,避免新手困惑为什么找到MySQL配置。</think> 根据Django框架特性,开发简单博客系统可分为以下核心步骤(以Django 4.x为例): --- ### **一、环境准备** ```bash # 创建虚拟环境并安装依赖 python -m venv venv source venv/bin/activate pip install django django-admin startproject mysite # 创建项目 cd mysite python manage.py startapp blog # 创建博客应用 ``` --- ### **二、核心开发步骤** #### **1. 数据模型设计 (blog/models.py)** ```python from django.db import models from django.utils import timezone class Post(models.Model): title = models.CharField(max_length=100) # 文章标题 content = models.TextField() # 正文 created_at = models.DateTimeField(default=timezone.now) # 创建时间 def __str__(self): return self.title ``` #### **2. 激活应用并迁移数据库** ```bash # mysite/settings.py INSTALLED_APPS = [ ..., 'blog', # 添加新应用 ] # 生成迁移文件并创建表 python manage.py makemigrations blog python manage.py migrate ``` #### **3. 创建超级管理员** ```bash python manage.py createsuperuser # 按提示输入账号密码 ``` #### **4. 配置后台管理 (blog/admin.py)** ```python from django.contrib import admin from .models import Post @admin.register(Post) class PostAdmin(admin.ModelAdmin): list_display = ('title', 'created_at') # 后台列表显示字段 ``` #### **5. 视图逻辑开发 (blog/views.py)** ```python from django.shortcuts import render from .models import Post def post_list(request): posts = Post.objects.all().order_by('-created_at') return render(request, 'blog/post_list.html', {'posts': posts}) ``` #### **6. 模板渲染 (blog/templates/blog/post_list.html)** ```django {% for post in posts %} <article> <h2>{{ post.title }}</h2> <p>{{ post.content }}</p> <time>{{ post.created_at }}</time> </article> {% endfor %} ``` #### **7. 配置URL路由** ```python # mysite/urls.py from django.urls import path from blog import views urlpatterns = [ path('posts/', views.post_list, name='post_list'), ] ``` --- ### **三、运行与验证** ```bash python manage.py runserver ``` 访问 `http://127.0.0.1:8000/admin` 发布文章 → `http://127.0.0.1:8000/posts/` 查看文章列表 --- ### **四、扩展建议** 1. **用户系统**:集成 Django 内置 `django.contrib.auth` 2. **增删改功能**: - 添加 `CreateView/UpdateView/DeleteView` - 示例视图:`class PostCreateView(CreateView): model = Post` 3. **样式优化**:添加 `static/css/styles.css` 4. **评论功能**:创建关联文章的外键模型: ```python class Comment(models.Model): post = models.ForeignKey(Post, on_delete=models.CASCADE) text = models.TextField() ``` --- ### **关键概念解析** 1. **MVT模式**: - **Model**: 数据库结构(`models.py`) - **View**: 业务逻辑(`views.py`) - **Template**: 前端展示(HTML模板) 2. **迁移机制**:模型更改 → `makemigrations` → `migrate`[^1] 3. **ORM优势**:通过 Python 类操作数据库,避免直接写 SQL > 提示:默认使用 SQLite 数据库(无需额外配置),生产环境可切换 PostgreSQL[^2] --- **相关功能迭代** - [ ] 用户注册/登录功能 - [ ] 文章分类标签 - [ ] Markdown 编辑器支持 - [ ] 按时间归档功能 通过以上步骤,2小时内即可构建基础博客系统,后续可根据需求逐步扩展功能模块[^2]。 --- **[问题延伸]** 1. 如何为 Django 博客添加用户认证系统? 2. 实现文章搜索功能的最佳实践是什么? 3. 如何优化 Django ORM 的数据库查询性能? 4. 部署 Django 项目到生产环境的注意事项?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值