我想做一个搜索论坛的主题列表,要做一个搜索框,首先我想起的是django源代码中的那个
搜索用户的框,我看了它的源代码,我学习python的时间不是很多,因此理解得不是很透彻,
但是当我看到里面的源代码时,发现
from django.db import models
from django.shortcuts import render_to_response
from mybbs.models import *
from django import forms
from django.conf import settings
from django.contrib.auth.models import User
from django.db.models import Q
from django.core import validators
这些我原先不是太清楚的地方,现在比较清晰明确了。我理解为什么这样了!
看来本身django源代码就是一个学习的教材!!
首先我看了django step by step,然后发现有个搜索功能,然后结合自己,代码如下,因此如下,
#首先这个定义在models中的(这是一个bbs中的一个表):
class Topic(models.Model):
topic_forum = models.ForeignKey(Forum, verbose_name="Forum" # Forum of the topic
topic_name = models.CharField(maxlength=255, verbose_name="Topic Title" # name of the topic
topic_author = models.CharField(maxlength=255, verbose_name="Author", blank=True) # topic author
topic_posts = models.PositiveIntegerField(default=0, blank=True, verbose_name="osts" # number of posts
topic_lastpost = models.CharField(maxlength=255, verbose_name="Last Post" # last poster etc.
topic_modification_date = models.DateTimeField(auto_now = True) # last post date
class Meta:
verbose_name = "Topic"
verbose_name_plural = "Topics"
def __str__(self):
return self.topic_name
###############################################################
#这个就是视图views中的search_list方法:
from django.views.generic.list_detail import object_list
def search_list(request):
topic_name = request.REQUEST['search']
if topic_name:
extra_lookup_kwargs = {'topic_name__icontains':topic_name} ###@@@@@
extra_context = {'searchvalue':topic_name}
# return object_list(request, Address,
# paginate_by=10, extra_context=extra_context,
# extra_lookup_kwargs=extra_lookup_kwargs)
return object_list(request, Topic.objects.filter(topic_name__icontains=topic_name), #这一行同上一样
paginate_by=10, extra_context=extra_context)
else:
return render_to_response('mybbs/nomatch.html', {'why': _('Not match')})
#打这个标记###@@@@@的这行,中第一个topic_name为models中定义的字段,要搞清,还有__icontains也要写上去,这样就可以模糊搜索了。。
######################################################################
#模板如下:
{% extends "body.html" %}
{% block content %}
<div class="blocktable">
<h2><span>所搜到的主题列表</span></h2>
<table width="40" border="1" cellspacing="0">
<tr>
<td width="35%" align="left">主题</th>
<td width="10%" align="center">作者</th>
<td width="10%" align="center">osts</th>
<td align="center">Last Post</th>
</tr>
{% for search_topic in object_list %}
<tr>
<td align="left">{{ search_topic.topic_name }}</td>
<td align="center"><a href="/user/show_profile/{{ topic.topic_author }}/">{{ search_topic.topic_author }}</a></td>
<td align="center">{{ search_topic.topic_posts }}</td>
<td align="center">{{ search_topic.topic_lastpost }}</td>
</tr>
{% endfor %}
</table>
{% endblock %}
############################################################
#在这里做个笔记!