Django URL管理

URL管理

1、创建好Project后在全局配置文件中有一个urls.py这个模块,该模块主要管理本项目的全局url配置

2、每个APP也应该创建一个urls.py模块来管理自己APP下的url集(可选)

全局urls.py配置

主要注意的是

1、需要import  include模块

2、在urlpatterns中添加app下的urls模块, namespace 参数可以防止不同app下的 url name

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^blog/', include('blog.urls', namespace="blog")),
]

APP下的urls.py

1、import django中url模块

2、import app中的views模块

3、需要注意的是url是以正则表达式来配置管理,访问web页面的url = 全局url+APP url

from django.conf.urls import url
from . import views


urlpatterns = [
    url(r'^$', views.index, name="index"),
]

URL.py中的正则表达式

这里需要注意的是:

1、如果正则里面有()括号表示为分组,会自动将()括号里面的内容传到views.article_page视图中。

2、如果正则格式为:(?P<>) 表示为命名分组,在View视图里面或者template调用的时候,可以直接使用命名去调用

 

在url.py中我们可以使用正则表达式来匹配url

urlpatterns = [
    url(r'^$', views.index),
    url(r'^article/(?P<article_id>[0-9]+)$', views.article_page),
]

其中(?P<article_id>[0-9]+)不是很好理解,先来看看re官方的解释:

“(?P<name>...) 子串匹配到的内容将可以用命名的name来提取url中的值。组的name必须是有效的python标识符,而且在本表达式内不重名。”

Templates href格式

href="{% url ‘app_name:url_name’ param %}" 

app_name和url_name中需要在全局的urls.py和app下的urls.py中配置好 

两种方式:

第一种

   

第二种

复制代码
#第一步在app-url.py的url中添加一个name参数:name='app-views-func'

urlpatterns = [
    url(r'^$', views.index),
    url(r'^article/(?P<article_id>[0-9]+)$', views.article_page, name='blog-views-article_page'),
]

#第二步在Template中编写href
href="{% url 'blog-views-article_page' article.id %}"
复制代码

正则表达是的命名分组(?P<>)

1、简单分组

复制代码
from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^articles/2003/$', views.special_case_2003),
    url(r'^articles/([0-9]{4})/$', views.year_archive),
    url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
    url(r'^articles/([0-9]{4})/([0-9]{2})/([0-9]+)/$', views.article_detail),
]
复制代码

2、有名分组(有名分组就可以在views.py中通过 关键字参数 year, month,day)

复制代码
from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^articles/2003/$', views.special_case_2003),
    url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
    url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
    url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$', views.article_detail),
]
复制代码

 

应用案例:

urls.py 相关代码:

 url(r'^bookdetail/(?P<book_id>\d+)/$', BookDetailView.as_view(), name='bookdetail'),

 

Views.py代码: 从url中接收book_id

复制代码
class BookDetailView(View):
    """
    图书详情
    """
    def get(self, request, book_id):
        book_detail = Book.objects.get(id=int(book_id))
return render(request, "book_detail.html", {"book_detail": book_detail})
复制代码

 

HTML代码:

复制代码
<table class="table table-hover">
    <thead>
        <tr>
            <th>No.</th>
            <th>书名</th>
            <th>作者</th>
            <th>出版日期</th>
            <th>定价</th>
        </tr>
    </thead>
    <tbody>
    {% for book in all_books.object_list %}
        <tr>
            <td>{{ forloop.counter }}</td>
            <td><a href="{% url "bookdetail" book.id %}">{{ book.name }}</a></td>
            <td>{{ book.author }}</td>
            <td>{{ book.publish_date|date:"Y-m-d" }}</td>
            <td>{{ book.price|floatformat:2 }}</td>
        </tr>
    {% empty %}
        <tr>
            <td>暂无图书</td>
        </tr>
    {% endfor %}
    </tbody>
</table>
复制代码


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值