Estoy tratando de mostrar el resultado de mi función de visualización en una página web de Django, pero solo obtengo una línea sin hipervínculo.

Código:

from django.http import HttpResponse
import feedparser

def index(content):
    YahooContent = feedparser.parse ("http://news.yahoo.com/rss/")
    for feed in YahooContent.entries:
            content = (feed.title + ": " + "\n"+feed.link + "\n" + feed.published + "\n")
            return HttpResponse(content)

Resultado en la página web:

Hombre arrestado por la muerte de una niña desaparecida en Arizona: http: / /news.yahoo.com/arizona-girls-home-searched-body-found-154919366.html jue, 04 sep 2014 14:05:16 -0400

0
Amir 4 sep. 2014 a las 22:40

2 respuestas

La mejor respuesta

Debe recopilar feeds en una lista y solo entonces, después del ciclo, devolver una instancia HttpResponse:

content = []
for feed in YahooContent.entries:
    content.append(feed.title + ": " + "\n" + feed.link + "\n" + feed.published)

return HttpResponse('\n'.join(content))

Otra opción, que seguiría filosofías de Django sobre la separación de preocupaciones, sería crear y representar una plantilla y pasar los datos al contexto de la plantilla:

  • crear una plantilla, digamos index.html con el siguiente contenido

    <table>
        <tr>
            <th>Title</th>
            <th>Link</th>
            <th>Published</th>
        </tr>
        {% for entry in entries %}
            <tr>
                <td>{{ entry.title }}</td>
                <td>{{ entry.link }}</td>
                <td>{{ entry.published }}</td>
            </tr>
        {% endfor %}
    </table>
    
  • coloque la plantilla en el directorio templates de su aplicación o proyecto

  • renderícelo en la vista usando, por ejemplo, {{ X0}}

    from django.shortcuts import render_to_response
    import feedparser
    
    def index(content):
        entries = feedparser.parse ("http://news.yahoo.com/rss/").entries
        return render_to_response('index.html', {'entries': entries})
    
4
alecxe 4 sep. 2014 a las 18:53

Su declaración 'return' está dentro del ciclo for debido a que está regresando después de la primera iteración y, por lo tanto, proporciona solo un feed en lugar de todos, para poder devolver todos los feeds, necesita crear una lista de todos los feeds y luego devuelve eso.

0
Vikas Mishra 4 sep. 2014 a las 18:47