Форум сайта python.su
Доброго времени суток! Несколько дней бьюсь над вот такой проблемой.
Есть модель
import datetime
from django.db import models
from django.db.models import permalink
from django.contrib.auth.models import User
from django.contrib import admin
from markdown import markdown
VIEWABLE_STATUS=[3,4]
class ViewableManager(models.Manager):
def get_query_set(self):
default_queryset=super(ViewableManager,self).get_query_set()
return default_queryset.filter(status__in=VIEWABLE_STATUS)
# Create your models here.
class Category(models.Model):
label=models.CharField(blank=True,max_length=50)
slug=models.SlugField()
class Meta:
verbose_name_plural="categories"
def __unicode__(self):
return self.label
class Story(models.Model):
STATUS_CHOICES=(
(1,"Needs Edit"),
(2,"Needs Approval"),
(3,"Published"),
(4,"Archived"),
)
title=models.CharField(max_length=100)
slug=models.SlugField()
category=models.ForeignKey(Category)
markdown_content=models.TextField()
html_content=models.TextField(editable=False)
owner=models.ForeignKey(User)
status=models.IntegerField(choices=STATUS_CHOICES,default=1)
created=models.DateTimeField(default=datetime.datetime.now)
modified=models.DateTimeField(default=datetime.datetime.now)
class Meta:
ordering=['modified']
verbose_name_plural="stories"
def save(self):
self.html_content=markdown(self.markdown_content)
self.modified=datetime.datetime.now()
super(Story,self).save()
admin_objects=models.Manager()
objects=ViewableManager()
@permalink
def get_absolute_url(self):
return ("cms-story",(),{'slug':self.slug})
class CategoryAdmin(admin.ModelAdmin):
prepopulated_fields={'slug':('label',)}
class StoryAdmin(admin.ModelAdmin):
list_display=('title','owner','status','created','modified')
search_fields=('title','content')
list_filter=('status','owner','created','modified')
prepopulated_fields={'slug':('title',)}
admin.site.register(Story,StoryAdmin)
admin.site.register(Category,CategoryAdmin)
from django.shortcuts import render_to_response, get_object_or_404
from django.db.models import Q
from cms.cmsapp.models import Story, Category
def category(request, slug):
"""Given a category slug, display all items in a category."""
category = get_object_or_404(Category, slug=slug)
story_list = Story.objects.filter(category=category)
heading = "Category: %s" % category.label
return render_to_response("cmsapp/story_list.html", locals())
def search(request):
"""
Return a list of stories that match the provided search term
in either the title or the main content.
"""
if 'q' in request.GET:
term = request.GET['q']
story_list = Story.objects.filter(Q(title__contains='first') | Q(markdown_content__contains=term))
heading = "Search results"
return render_to_response("cmsapp/story_list.html", locals())
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
<title>{% block title %}{% endblock %}</title>
<style type="text/css" media="screen">
body { margin: 15px; font-family: Arial; }
h1, h2 { background: #aaa; padding: 1% 2%; margin: 0; }
a { text-decoration: none; color: #444; }
.small { font-size: 75%; color: #777; }
#header { font-weight: bold; background: #ccc; padding: 1% 2%; }
#story-body { background: #ccc; padding: 2%; }
#story-list { background: #ccc; padding: 1% 1% 1% 4%; }
#story-list li { margin: .5em 0; }
</style>
</head>
<body>
<div id="header">
<form action="{% url cms-search %}" method="get">
<a href="{% url cms-home %}">Home</a> •
<label for="q">Search:</label> <input type="text" name="q">
</form>
</div>
{% block content %}
{% endblock %}
</body>
</html>
{% extends "cmsapp/base.html" %}
{% block content %}
{% if heading %}
<h1>{{ heading }}</h1>
{% endif %}
<ul id="story-list">
{% for story in story_list %}
<li><a href="{{ story.get_absolute_url }}">{{ story.title }}</a></li>
{% endfor %}
</ul>
{% endblock %}
from django.conf.urls.defaults import *
from cms.cmsapp.models import Story
info_dict={'queryset':Story.objects.all(),'template_object_name':'story'}
urlpatterns = patterns('django.views.generic.list_detail',
url(r'^(?P<slug>[-\w]+)/$', 'object_detail', info_dict, name="cms-story"),
url(r'^$', 'object_list', info_dict, name="cms-home"),
)
urlpatterns += patterns('cms.cmsapp.views',
url(r'^category/(?P<slug>[-\w]+)/$', 'category', name="cms-category"),
url(r'^search/$', 'search', name="cms-search"),
)
Отредактировано (Окт. 27, 2010 15:59:05)
Офлайн
diegoКак вы думаете, в эту регулярку попадает ‘/search/’?url(r'^(?P<slug>[-\w]+)/$', 'object_detail', info_dict, name="cms-story"),
Офлайн
DaevaornСпасибо за наводку!diegoКак вы думаете, в эту регулярку попадает ‘/search/’?url(r'^(?P<slug>[-\w]+)/$', 'object_detail', info_dict, name="cms-story"),
url(r'^search/(?P<slug>[-\w]+)/$', 'object_detail', info_dict, name="cms-story"),
url(r'(?P<slug>[-\w]+)/$', 'object_detail', info_dict, name="cms-story")
Отредактировано (Окт. 28, 2010 00:58:54)
Офлайн
Проблема решена
регулярка
url(r'^search/$', 'search', name="cms-search"),
url(r'^(?P<slug>[-\w]+)/$', 'object_detail', info_dict, name="cms-story"),
Отредактировано (Ноя. 5, 2010 19:16:33)
Офлайн
diegoДоброго времени суток. Для меня эта проблема решена по другому, немного. Два дня мучался, может быть кому-нибудь поможет:
Проблема решена
class StoryAdmin(admin.ModelAdmin):
list_display=('title','owner','status','created','modified')
search_fields=('title','content')<--------------------------------здесь
list_filter=('status','owner','created','modified')
prepopulated_fields={'slug':('title',)}
if 'q' in request.GET:
term = request.GET['q']
story_list = Story.objects.filter(Q(title__contains='first') | Q(markdown_content__contains=term)) <----- 'first' -откуда оно, почему не term?
heading = "Search results"
return render_to_response("cms/story_list.html", locals())
urlpatterns = patterns('cmsproject.cms.views',
url(r'^category/(?P<slug>[-\w]+)/$', 'category', name="cms-category"),
url(r'^search/$', 'search', name="cms-search"),
)
urlpatterns += patterns('django.views.generic.list_detail',
url(r'^(?P<slug>[-\w]+)/$', 'object_detail', info_dict, name="cms-story"),
url(r'^$', 'object_list', info_dict, name='cms-home'),
)
TEMPLATE_DIRS = ("C:/Server/Site/cyborg-ws/www/cmsproject",)
INSTALLED_APPS = (......
.......
'cmsproject.cms',
)
Отредактировано (Янв. 21, 2011 18:39:39)
Офлайн