2015-03-17 3 views
0

Я работаю в небольшом приложении для блогов с использованием Django. Извините, если вопрос очевиден, но я новичок. На самом деле это мой третий, так как я начал онлайн-курс. У меня есть следующий QuerySet:Работа со ссылками в Django

def all(request): 
    allTiles = Post.objects.values('title') 
    allPosts = Post.objects.all()[:3] 
    context = {'Posts': allPosts,"Titles":allTiles} 
    template = "home.html" 
    return render(request, template, context) 

и follwing HTML код:

<ol class="list-unstyled"> 

      {% for singleTile in Titles %} 
      <li><a href="#">{{singleTile.title}}</a></li> 
      {% endfor %} 
      </ol> 

Как вы можете видеть каждое название создает ссылку. Позволяет предположить, что человек решает прочитать одно из сообщений. Как я могу использовать название названия и отправить запрос обратно в базу данных, чтобы получить содержание сообщения.

ответ

0

Вы должны настроить URL первого как

<a href="#">{% url 'app.views.post_id' singleTile.id %}</a></li>

В ваших URLs

url(r'^post/(?P<post_id>\d+)/$', views.by_id, name='post_id'), 

И в ваших взглядах

def post_id(request, post_id): 
    allTiles = Post.objects.get(id=post_id) 
    return render(request, template, context) 
1

Лучше использовать id или slug поле для такой задачи.

Но если вы, конечно, хотите использовать title в качестве параметра GET затем применить urlencode фильтр для значения поля:

<a href="{% url 'post_detail' %}?title={{ singleTile.title|urlencode }}"> 
    {{ singleTile.title }} 
</a> 

И вид будет что-то вроде этого:

def post_detail(request): 
    post = get_object_or_404(Post, title=request.GET.get('title')) 
    return render(request, 'post_detail.html', {'post': post}) 

ОБНОВЛЕНИЕ: Если вы решите пойти с опцией id/slug, то вы можете использовать общий DetailView:

<a href="{% url 'post_detail' singleTile.id %}"> 
    {{ singleTile.title }} 
</a 

urls.py:

from django.views.generic.detail import DetailView 
from app.models import Post 

url(r'^post/(?P<pk>\d+)/$', DetailView.as_view(model=Post), 
          name='post_detail') 
+0

круто ... Я люблю 'DetailView' –

+0

Просто быстрый вопрос: означает, что делает пост после того, как г '^? – Alexander

+0

Это базовый url для всех ваших сообщений. Таким образом, они являются 'yoursite.com/post/1 /', 'yoursite.com/post/2 /' и т. Д. Вы можете пропустить эту строку: 'r '^ (? P \ d +)/$'' поэтому url будет: 'yoursite.com/1 /' ... Прочитать документы диспетчера URL-адресов: https: //docs.djangoproject .com/ы/1,7/темы/HTTP/URLs/# примера – catavaran

Смежные вопросы