Django 学习 4 表单处理

来源:互联网 发布:农村淘宝运营方案模板 编辑:程序博客网 时间:2024/06/05 21:06
1.接下来,我们利用现有的Book数据做一个简单的查询页面。这既然是基于Book app的,我们就把搜索视图放在books.views中:
books/views codes:
   
from django.db.models import Q #导入查询对象    from django.shortcuts import render_to_response #返回response的快捷方法    from models import Book    def search(request):        query = request.GET.get('q','') #request对象的GET方法将查询字符串返回为键:值字典,用get()方法来取字典值可以在不存在键的时候返回一个默认值        if query:            qset = (                Q(title__icontains=query)|                Q(authors__first_name__icontains=query)|                Q(authors__last_name__icontains=query)            )            results = Book.objects.filter(qset).distinct() #可以让一个Q对象作为filter()方法的参数,Q对象以某种查询逻辑初始化,为查询提供了这种逻辑逻辑。distinct()去重        else:            results = []        render_to_response("books/search.html",{'results':results,'query':query})



2.同时,我们也要有相匹配的查询页面模板,他放在templates/books/下
templates/books/search.html codes:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">    <html lang="en">    <head>        <title>Search{% if query %} Results{% endif %}</title>    </head>    <body>      <h1>Search</h1>      <form action="." method="GET">        <label for="q">Search: </label>        <input type="text" name="q" value="{{ query|escape }}">        <input type="submit" value="Search">      </form>      {% if query %}        <h2>Results for "{{ query|escape }}":</h2>#在所有使用 query 和 book 的地方,我们通过 escape 过滤器来确保任何可能的恶意的搜索文字被过滤出去,以保证不被插入到页面里。        {% if results %}          <ul>          {% for book in results %}            <li>{{ book|escape }}</l1>          {% endfor %}          </ul>        {% else %}          <p>No books found</p>        {% endif %}      {% endif %}    </body>    </html>



3.接下来就是在URLconf中添加视图索引
urls codes:
  
 from django.conf.urls import include, url    from django.contrib import admin    urlpatterns = [        url(r'^search.html$','books.views.search'),        # Examples:        # url(r'^$', 'mysite.views.home', name='home'),        # url(r'^blog/', include('blog.urls')),        url(r'^admin/', include(admin.site.urls)),    ]


4.Django拥有创建自定义表单的模板,暂且不议
0 0
原创粉丝点击