zoukankan      html  css  js  c++  java
  • 利用Django中的url方法实现地址动态拼接自动生成超链接地址

    目标

    建立一个图书列表页面,显示图书名列表,并实现点击书名跳转到图书详细页面,显示图书详细信息。

    • URL方法简介
      • 功能:返回一个绝对路径的引用(不包含域名的URL);该引用匹配一个给定的视图函数和
        一些可选的参数。
      • 语法:{% url 'some-url-name' value1 value2 %}
      • 参数'some-url-name'表示在urls.py文件中的路由地址;
      • 参数value1和value2表示拼接的值,可选。
      • 例如,urls.py: url(r'^bookinfo/(d+)/$', polls_views.bookinfo, name='book')
        html代码中:{% url 'book' 3 %};
        拼接后返回地址为:bookinfo/3/
    已有数据库及信息

    数据库djangodemo中存有信息:

    表polls_book

    +----+--------------+-----------+
    | id | name | person_id |
    +----+--------------+-----------+
    | 1 | 围城 | 1 |
    | 2 | 蝴蝶梦 | 2 |
    | 3 | 鲁滨逊漂流记 | 3 |
    | 4 | 小王子 | 4 |
    +----+--------------+-----------+

    表polls_person

    +----+------+-----+
    | id | name | age |
    +----+------+-----+
    | 1 | Joe | 12 |
    | 2 | walt | 18 |
    | 3 | walt | 17 |
    | 4 | Jany | 20 |
    | 5 | John | 29 |
    +----+------+-----+

    思路
    • 先写出图书列表页面
    • 实现超链接自动拼接
    • 编写图书详情页面
    实现
    • 项目目录信息

    这里写图片描述

    • 建立页面路由
      在urls.py文件中添加
    # 导入路由,支持正则表达式
    from django.conf.urls import url
    # 在路由匹配模式中添加图书列表页面的路由
    urlpatterns = [
    	url(r'^booklist/$', polls_views.booklist),
     # 定义拼接地址,获取书籍信息
    	url(r'^bookinfo/(d+)/$', polls_views.bookinfo, name='bookinfo')
    ]
    
    • 1. 在views.py文件中添加
    # 图书列表页面控制器
    def booklist(request):
        # 导入图书类
        from polls.models import Book
        # 实例化一个图书对象
        books = Book.objects.all()
        # 建立空字典存储booklist
        dict_book = {}
        dict_book['booklist'] = books
        # 向bookList.html页面传入数据dict_book
        return render(request, 'bookList.html', dict_book)
    
    • 2. 在templates文件夹下新建bookList.html文件,并添加
    {# 在bookList.html文件的body下添加如下代码 #}
    <body>
        <h2>图书架</h2>
        <ul>
            {% for book in booklist %}
    	        {# 使用每本书的book.id作为获取详情的查询条件,生成链接 #}
                <li><a href="{% url 'bookinfo'  book.id  %}">{{ book.name }}</a></li>
            {% endfor %}
        </ul>
    </body>
    
    • 3. 在view.py文件中定义获取书籍信息详细信息的控制方法
    # 获取书籍信息
    def bookinfo(request, id):
        # 导入图书类
        from polls.models import Book
        # 实例化一个图书对象,使用book.id查询该书籍数据
        book = Book.objects.get(id=id)
        # 建立空字典存储booklist
        dict_book = {}
        # 存储book书名
        dict_book['book'] = book.name
        # 存储book作者
        dict_book['author'] = book.person.name
        # 存储book作者年龄
        dict_book['author_age'] = book.person.age
        # 向bookInfo.html页面传入数据dict_book
        return render(request, 'bookInfo.html', dict_book)
    
    • 4. 在templates文件夹下新建bookInfo.html文件,并添加
    {# 在bookInfo.html文件的body下添加如下代码 #}
    <body>
        <h2>{{ book }}</h2>
        <ul>
            <li>作者:{{ author }}</li>
            <li>年龄:{{ author_age }}</li>
        </ul>
    </body>
    
    实现效果
    • 在浏览器中访问http://127.0.0.1:8000/booklist/

    这里写图片描述

    • 点击“鲁滨逊漂流记

    这里写图片描述

    可以看出,地址栏里的127.0.0.1:8000/bookInfo/3中"3"是根据书籍“鲁滨逊漂流记”的id获取的,“鲁滨逊漂流记”在数据库表polls_book中对应的id是3。

    表polls_book
    +----+--------------+-----------+
    | id | name | person_id |
    +----+--------------+-----------+
    | 1 | 围城 | 1 |
    | 2 | 蝴蝶梦 | 2 |
    | 3 | 鲁滨逊漂流记 | 3 |
    | 4 | 小王子 | 4 |
    +----+--------------+-----------+

    总结
    1. 以上工作的条件是你已经完成了Django的正常配置,并正常开启了server;
    2. 数据库中的数据是预先添加好的,这里只是查询数据库中的数据。
    3. 能力有限,欢迎指错纠正。
  • 相关阅读:
    数据库_初学
    数据库—修改表的列
    做一个导航栏(bootstrap)
    几个比较常用的特效
    当、你想给一个目标挂上一个事件时
    图片轮播的几个小程序
    JS练习题 ( 下拉菜单;好友选中输入)
    Bootstrap 按钮和折叠插件
    Bootstrap 轮播插件
    Bootstrap 弹出框和警告框插件
  • 原文地址:https://www.cnblogs.com/waltsmith/p/8083247.html
Copyright © 2011-2022 走看看