Foros del Web » Programando para Internet » Python »

Url en Html

Estas en el tema de Url en Html en el foro de Python en Foros del Web. Hola que tal buenas noches, me preguntaba si pudiesen ayudarme con el siguiente código models.py Código: from django.db import models from django.contrib import auth class ...
  #1 (permalink)  
Antiguo 28/02/2013, 20:14
 
Fecha de Ingreso: abril-2011
Ubicación: Baja California sur
Mensajes: 39
Antigüedad: 13 años
Puntos: 0
Url en Html

Hola que tal buenas noches, me preguntaba si pudiesen ayudarme con el siguiente código

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> 
  #2 (permalink)  
Antiguo 28/02/2013, 21:18
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Url en Html

Por lo que pude leer todo parece estar bien, de acuerdo a la versión 1.4

Y tal ese fue mi error, a la mejor estas usando django 1.5, si ese es el caso en la documentación hay un warining sobre el uso de comillas en templatetag url.

https://docs.djangoproject.com/en/de.../builtins/#url

Entonces probablemente ese sea tu error.

Si no estas usando django 1.5 entonces no le agregues comillas.
  #3 (permalink)  
Antiguo 28/02/2013, 21:42
 
Fecha de Ingreso: abril-2011
Ubicación: Baja California sur
Mensajes: 39
Antigüedad: 13 años
Puntos: 0
Respuesta: Url en Html

de verdad gracias por tu respuesta, tengo django 1.5 y la verdad vengo de javascript, ya me había dado dolores de cabeza pero aun no entiendo como quedaría :(
  #4 (permalink)  
Antiguo 28/02/2013, 21:57
 
Fecha de Ingreso: abril-2011
Ubicación: Baja California sur
Mensajes: 39
Antigüedad: 13 años
Puntos: 0
Respuesta: Url en Html

aun me da error en el mismo lugar

Código:
11	        <form action= {% url searchresults %} method="GET">

:(
  #5 (permalink)  
Antiguo 28/02/2013, 22:04
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Url en Html

Deberia de funcionar de la siguiente manera:
Código:
<form action="{% url 'searchresults' %}" method="GET">
  #6 (permalink)  
Antiguo 28/02/2013, 22:09
 
Fecha de Ingreso: abril-2011
Ubicación: Baja California sur
Mensajes: 39
Antigüedad: 13 años
Puntos: 0
Respuesta: Url en Html

yo se que molesto demasiado, pero de verdad gracias por las respuestas ya no me da error lo anterior
el siguiente error fue este

Código HTML:
Ver original
  1. <h2><a href="{% url 'postdetails post.machine_name' %}">{{ post.title }}</a></h2>

Última edición por djmkmix; 28/02/2013 a las 22:14
  #7 (permalink)  
Antiguo 28/02/2013, 22:21
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Url en Html

No es ninguna molestia.

Código HTML:
Ver original
  1. <h2><a href="{% url 'postdetails' post.machine_name %}">{{ post.title }}</a></h2>
  #8 (permalink)  
Antiguo 28/02/2013, 22:44
 
Fecha de Ingreso: abril-2011
Ubicación: Baja California sur
Mensajes: 39
Antigüedad: 13 años
Puntos: 0
Respuesta: Url en Html

De verdad gracias por todo, fue de muchísima ayuda, tengo otros problemas que no se si tienen que ver, cuando doy click a los títulos, tendría que llevarme al post pero me da error

Reverse for 'postdetails' with arguments '('',)' and keyword arguments '{}' not found.
Código HTML:
Ver original
  1. 1   <article>
  2. 2       <header>
  3. 3           <h2><a href="{% url 'postdetails' post.machine_name %}">{{ post.title }}</a></h2>
  #9 (permalink)  
Antiguo 28/02/2013, 23:13
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Url en Html

Segun tu urls.py debería ser:
Código HTML:
Ver original
  1. <h2><a href="{% url 'postdetails' slug=post.machine_name %}">{{ post.title }}</a></h2>

Y tienes que checar que post.machine_name no este vació.
  #10 (permalink)  
Antiguo 28/02/2013, 23:21
 
Fecha de Ingreso: abril-2011
Ubicación: Baja California sur
Mensajes: 39
Antigüedad: 13 años
Puntos: 0
Respuesta: Url en Html

Gracias por todo rapeitia y de verdad disculpa con todo, pareciera que todo va bien pero no, post.machine_name no esta vacio ya que cambia de link dependiendo el titulo, sigue siendo el mismo codo go el error ahora me dice esto

Error during template rendering
In template /Users/Miguel/Python/pdjango1/pdjango1/templates/post.html, error at line 3
Reverse for 'postdetails' with arguments '()' and keyword arguments '{u'slug': ''}' not found.
1 <article>
2 <header>
3 <h2><a href="{% url 'postdetails' slug=post.machine_name %}">{{ post.title }}</a></h2>
  #11 (permalink)  
Antiguo 28/02/2013, 23:31
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Url en Html

Como te dije tienes que checar tu variable post.machine_name, por que esta regresando un string vacio.

¿Y que tiene que ver eso?

Bueno es sencillo, post.machine_name debe de coincidir con la expresión regular del parámetro slug.

Osea post.machine_name debe de coincidir con (?P<slug>[a-zA-Z0-9_-]+) si no coincide, como en este caso entonces te arroja un error.

Otra cosa post.machine_name esta vació por que lo indica el error, otra cosa que post.title tenga algo no significa que post.machine_name tenga algo.
  #12 (permalink)  
Antiguo 28/02/2013, 23:37
 
Fecha de Ingreso: abril-2011
Ubicación: Baja California sur
Mensajes: 39
Antigüedad: 13 años
Puntos: 0
Respuesta: Url en Html

lo revise y no esta vacío de hecho te entrega resultados de cada titulo donde los espacios los convierta en _ o en su defecto - entonces por ese lado no lo entrega vacío, crees que lo mas adecuado es mejor que trabaje con django 1.4?
  #13 (permalink)  
Antiguo 28/02/2013, 23:42
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Url en Html

Si no tienes algo como django-debug-toolbar para ver los valores de tus variables, queries entre otras cosas puedes hacer lo siguiente:
Código HTML:
Ver original
  1. <h2>post.machine = &quot;{{ post.machine_name }}&quot;</h2>

Y entonces vas a ver que post.machine_name esta vació por que post.title no tiene nada que ver.
  #14 (permalink)  
Antiguo 28/02/2013, 23:47
 
Fecha de Ingreso: abril-2011
Ubicación: Baja California sur
Mensajes: 39
Antigüedad: 13 años
Puntos: 0
Respuesta: Url en Html

me sale cada resultado y si alguno tiene espacio se cambia a -

post machine = "texto-texto"
  #15 (permalink)  
Antiguo 28/02/2013, 23:56
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Url en Html

Código HTML:
Ver original
  1. {% if post.machine_name %}
  2. <h2><a href="{% url 'postdetails' slug=post.machine_name %}">{{ post.title }}</a></h2>
  3. {% endif %}

Esto en teoría debería de arreglar tu problema. Básicamente solamente va a mostrar aquellos títulos cuyo post.machine_name no estén vacíos.
  #16 (permalink)  
Antiguo 01/03/2013, 00:28
 
Fecha de Ingreso: abril-2011
Ubicación: Baja California sur
Mensajes: 39
Antigüedad: 13 años
Puntos: 0
Respuesta: Url en Html

Gracias Razpeitia :D

Etiquetas: django, url
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:22.