models.py
Código:
from django.db import models from django.contrib import auth class Post(models.Model): title = models.CharField(max_length=255) machine_name = models.SlugField(max_length=255, primary_key=True) content = models.TextField(blank=True) publication_date = models.DateTimeField(auto_now_add=True) owner = models.ForeignKey(auth.models.User) def __unicode__(self): return self.title def briefing(self): return self.content[:300] + '...' class Meta: ordering = ['-publication_date'] class Commentary(models.Model): post = models.ForeignKey(Post) content = models.TextField() publication_date = models.DateTimeField(auto_now_add=True) owner = models.CharField(max_length=50, default='El hombre invisible') def __unicode__(self): return self.owner + '@' + unicode(self.post) class Meta: verbose_name_plural = 'commentaries' ordering = ['-publication_date']
views.py
Código:
# Create your views here. from django.views.generic import ListView, TemplateView from posts.models import Post from django.db.models import Q class PostList(ListView): template_name="postlist.html" model = Post class SearchResults(ListView): template_name = "searchresults.html" def get_queryset(self): if self.request.method == 'GET': form = SearchForm(self.request.GET) if form.is_valid(): query = form.cleaned_data['query'] words = query.split(' ') qobjects = [Q(content__icontains=w) | Q(title__icontains=w) for w in words] condition = reduce(lambda x,y:x&y, qobjects) results = Post.objects.filter(condition) return results return Post.objects.none() class PostDetails(TemplateView): template_name='postdetails.html' def get_post(self, slug): return Post.objects.get(pk=slug) def get_form(self, post): if self.request.method == 'POST': form = AddCommentaryForm(self.request.POST) if form.is_valid(): post.commentary_set.add(form.save(commit=False)) form = AddCommentaryForm() else: form = AddCommentaryForm() return form def get_context_data(self, **kwargs): context = super(PostDetails, self).get_context_data(**kwargs) post = self.get_post(kwargs['slug']) form = self.get_form(post) context.update({'form':form, 'post':post}) return context def post(self, request, *args, **kwargs): context = self.get_context_data(**kwargs) return self.render_to_response(context)
url.py
Código:
from posts.views import PostList, PostDetails, SearchResults from django.conf.urls.defaults import patterns, include, url # Uncomment the next two lines to enable the admin: from django.contrib import admin admin.autodiscover() urlpatterns = patterns('', # Examples: # url(r'^$', 'djangoblog.views.home', name='home'), # url(r'^djangoblog/', include('djangoblog.foo.urls')), # Uncomment the admin/doc line below to enable admin documentation: # url(r'^admin/doc/', include('django.contrib.admindocs.urls')), # Uncomment the next line to enable the admin: url(r'^admin/', include(admin.site.urls), name='adminpage'), url(r'^$', PostList.as_view(), name='mainpage'), url(r'^posts/', PostList.as_view(), name='postlist'), url(r'^post/(?P<slug>[a-zA-Z0-9_-]+)/', PostDetails.as_view(), name='postdetails'), url(r'^search/', SearchResults.as_view(), name='searchresults'), )
en la carpeta templates tengo un archivo base.html y el error que tengo es que no aparece nada en:
"{% url searchresults %}"
"{% url mainpage %}"
base.html
Código HTML:
{% load static %} {% get_static_prefix as STATIC_URL %} <!DOCTYPE HTML> <html> <head> <title>Mi blog | {% block title %}Un título genérico{% endblock %}</title> <link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}style.css"> </head> <body> <form action="{% url searchresults %}" method="GET"> <p>{{ searchform.query.errors }}</p> <label>Buscar: {{ searchform.query }}<input type="submit" value="Buscar"></label> </form> <header> <h1><a href="{% url mainpage %}">Mi blog</a></h1> </header> {% block content %}Un contenido genérico{% endblock %} </body> </html>
y el siguiente error entre en post.html ya que no me da el resultado y cuando borro estos 4 problemas se ve la pagina
"{% url postdetails post.machine_name %}"
"{% url postdetails post.machine_name %}#commentaries"
post.html
Código HTML:
<article> <header> <h2><a href="{% url postdetails post.machine_name %}">{{ post.title }}</a></h2> </header> <section> {{ post.content|safe }} </section> <aside> {% with comcount=post.commentary_set.all.count %} <p><a href="{% url postdetails post.machine_name %}#commentaries">{{ comcount }} comentario{{comcount|pluralize}}</a></p> {% endwith %} <p>Fecha de publicación: {{ post.publication_date|date:"r" }}</p> </aside> </article>