Форум сайта python.su
Здравствуйте.
Недавно решил освоить Django. Прочитал документацию и решил создать небольшой сайт. Создал модель Article и view для нее:
class ArticleListView(ListView): model = Article class ArticleDetailView(DetailView): model = Article
{% block sidebar %} <ul> {% for article in object_list %} <li><a href="{{article.get_absolute_url}}">{{article.title}}</a></li> {% endfor %} </ul> {% endblock %}
{% extends "base.html" %} {% block content %} <h2>{{ article.title }}</h2> <p>{{ article.content }}</p> {% endblock %}
Офлайн
Я делаю условно так
{# menu.html #} {% load custom_tags %} <ul class="nav"> <li {% menu_entry list %}><a href="{% url product_list %}">Список товаров</a></li> <li {% menu_entry add %}><a href="{% url product_add %}">Новый</a></li> <li {% menu_entry producer_list %}><a href="{% url producer_list %}" >Список поставщиков</a></li> </ul>
# templatetags/custom_tags.py @register.tag(name="menu_entry") def menu_entry(parser, token): try: menu_item_name = token.split_contents()[1] except ValueError: raise template.TemplateSyntaxError("%r error" % token.contents.split()[0]) return ContextMenuNode(menu_item_name) class ContextMenuNode(template.Node): def __init__(self, menu_item_name): self.menu_item_name = menu_item_name def render(self, context): menu_entry = context["menu_entry"] if menu_entry == self.menu_item_name: return "class=active" return
#common/views.py class MyBaseView(object): title = '' menu_entry = '' def get_context_data(self, **kwargs): context = super(MyBaseView, self).get_context_data(**kwargs) context["action_title"] = self.action_title context["menu_entry"] = self.menu_entry return context def dispatch(self, request, *args, **kwargs): if not request.user.is_authenticated(): return HttpResponseRedirect(reverse("login")) self.territory = request.user.territory_set.get() return super(MyBaseView, self).dispatch(request, *args, **kwargs)
class ArticleDetailView(MyBaseView, DetailView): model = Article menu_entry = "list"
#base.html ..... {% block menu %} {% include "templates/menu.html" %} {% endblock %} .....
Отредактировано FishHook (Авг. 2, 2013 05:57:53)
Офлайн
Спасибо большое. Сейчас буду разбираться. Но исходя из этого кода я понял, что пункты меню мы добавляем вручную. А нельзя ли сделать так, чтобы при создании новой статьи Article, появлялся автоматически пункт меню? Заранее спасибо.
Офлайн
zagoЯ такого меню не понимаю
чтобы при создании новой статьи Article, появлялся автоматически пункт меню
Офлайн
FishHook
тоже задаюсь вопросом грамотного создания меню.
Можешь привести не “условный” пример, если не трудно конечно?
Офлайн
я тоже до сих пор разбираюсь, но у меня до сих пор ничего не получается.
Офлайн
od-5приведенный пример вполне рабочий
FishHookтоже задаюсь вопросом грамотного создания меню.Можешь привести не “условный” пример, если не трудно конечно?
Офлайн
zago
А нельзя ли сделать так, чтобы при создании новой статьи Article, появлялся автоматически пункт меню?
<ul class="nav"> {% for article in articles %} <li><a href = '{(article.get_absolute_url }}'>{{artice}}</a></li> {% endfor %} </ul>
Офлайн
У меня не получается отобразить этот список:
<ul class="nav"> {% for article in articles %} <li><a href = '{(article.get_absolute_url }}'>{{artice}}</a></li> {% endfor %} </ul>
from django.db import models class Article(models.Model): title=models.CharField(max_length=255) content=models.TextField(max_length=10000) def __unicode__(self): return self.title def get_absolute_url(self): return "/article/%i/" %self.id # Create your models here.
from article.models import Article from django.views.generic import DetailView from django.shortcuts import render_to_response class ArticleDetailView(DetailView): model = Article def menu(request): article_list=Article.objects.all() return render_to_response('article/menu.html', {'article_list':article_list})
from django.conf.urls 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'^$', 'zago.views.home', name='home'), # url(r'^zago/', include('zago.foo.urls')), url(r'^article/$', 'article.views.menu'), url(r'^article/', include('article.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)), )
{% extends "index.html" %} {% block content %} <h2>{{ article.title }}</h2> <p>{{ article.content }}</p> {% endblock %}
{% block sidebar %} <ul class="nav"> {% for article in article_list %} <li><a href = '{{article.get_absolute_url}}'>{{article.title}}</a></li> {% endfor %} </ul> {% endblock %}[s][/s]
<title>{{ article.title }}</title> </style> [s][/s]<body> <div id="left"> {% block sidebar %} {% endblock %} </div> <div id="content"> {% block content %} {% endblock %} </div> </body>
Отредактировано zago (Авг. 8, 2013 03:16:20)
Офлайн
Вам нужно для себя разобраться, какие в каждом конкретном урле используются шаблоны и какие в них передаются переменные.
Офлайн