article/blog fixes and improvements

remotes/origin/1203
Ivan_Home_PC 11 years ago
parent f92b1dfabd
commit 28caafcce2
  1. 6
      article/forms.py
  2. 8
      article/urls.py
  3. 24
      article/views.py
  4. 14
      templates/client/article/article.html
  5. 3
      templates/client/article/blog_list.html
  6. 10
      templates/client/article/catalog.html
  7. 6
      templates/client/includes/article_theme.html
  8. 9
      theme/views.py

@ -19,7 +19,7 @@ from conference.models import Conference
class BlogForm(forms.Form): class BlogForm(forms.Form):
type = Article.blog type = Article.blog
theme = forms.ModelMultipleChoiceField(label='Тематики', queryset=Theme.objects.all(), required=False, theme = forms.ModelMultipleChoiceField(label='Тематики', queryset=Theme.objects.exclude(article__id=None), required=False,
widget=forms.SelectMultiple(attrs={'style':'width: 550px'})) widget=forms.SelectMultiple(attrs={'style':'width: 550px'}))
publish_date = forms.DateField(label=u'Дата публикации', input_formats=['%Y-%m-%d', '%d.%m.%Y'], required=False) publish_date = forms.DateField(label=u'Дата публикации', input_formats=['%Y-%m-%d', '%d.%m.%Y'], required=False)
tag = forms.CharField(label=u'Теги', widget=forms.HiddenInput(), required=False) tag = forms.CharField(label=u'Теги', widget=forms.HiddenInput(), required=False)
@ -258,7 +258,7 @@ class BlogForm(forms.ModelForm):
class ArticleFilterForm(forms.Form): class ArticleFilterForm(forms.Form):
theme = forms.MultipleChoiceField(label=_(u'Тематика:'), required=False, theme = forms.MultipleChoiceField(label=_(u'Тематика:'), required=False,
choices=[(item.id, item.name) for item in Theme.objects.language().all()]) choices=[(item.id, item.name) for item in Theme.objects.language().exclude(article__id=None)])
tag = forms.CharField(label=_(u'Теги:'), widget=forms.HiddenInput(), required=False) tag = forms.CharField(label=_(u'Теги:'), widget=forms.HiddenInput(), required=False)
''' '''
@ -295,4 +295,4 @@ class NewsFilterForm(forms.Form):
super(NewsFilterForm, self).__init__(*args, **kwargs) super(NewsFilterForm, self).__init__(*args, **kwargs)
ids = [item['theme'] for item in list(Article.objects.news().values('theme').distinct())] ids = [item['theme'] for item in list(Article.objects.news().values('theme').distinct())]
self.fields['theme'] = forms.MultipleChoiceField(label=_(u'Тематика:'), required=False, self.fields['theme'] = forms.MultipleChoiceField(label=_(u'Тематика:'), required=False,
choices=[(item.id, item.name) for item in Theme.objects.language().filter(id__in=ids)]) choices=[(item.id, item.name) for item in Theme.objects.language().exclude(article__id=None).filter(id__in=ids)])

@ -1,11 +1,13 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from django.conf.urls import patterns, url from django.conf.urls import patterns, url
from views import BlogList, NewsList, BlogDetail, NewsDetail, NewsTagCatalog, BlogsTagCatalog from views import BlogList, NewsList, BlogDetail, NewsDetail, NewsTagCatalog, BlogsFilterCatalog
urlpatterns = patterns('', urlpatterns = patterns('',
url(r'^blogs/tag/(?P<slug>.*)/page/(?P<page>\d+)/$', BlogsTagCatalog.as_view(), {'meta_id':75}), url(r'^blogs/tag/(?P<slug>.*)/page/(?P<page>\d+)/$', BlogsFilterCatalog.as_view(), {'meta_id':75, 'filter':'tag'}),
url(r'^blogs/theme/(?P<slug>.*)/page/(?P<page>\d+)/$', BlogsFilterCatalog.as_view(), {'filter':'theme'}),
url(r'^blogs/page/(?P<page>\d+)/$', BlogList.as_view(), {'meta_id':79}), url(r'^blogs/page/(?P<page>\d+)/$', BlogList.as_view(), {'meta_id':79}),
url(r'^blogs/tag/(?P<slug>.*)/$', BlogsTagCatalog.as_view(), {'meta_id':75}), url(r'^blogs/tag/(?P<slug>.*)/$', BlogsFilterCatalog.as_view(), {'meta_id':75, 'filter':'tag'}),
url(r'^blogs/theme/(?P<slug>.*)/$', BlogsFilterCatalog.as_view(), {'filter':'theme'}),
url(r'^blogs/$', BlogList.as_view(), {'meta_id':79}), url(r'^blogs/$', BlogList.as_view(), {'meta_id':79}),

@ -5,7 +5,7 @@ from functions.custom_views import ListView
from django.http import HttpResponse from django.http import HttpResponse
from models import Article from models import Article
from forms import ArticleFilterForm from forms import ArticleFilterForm
from theme.models import Tag from theme.models import Tag, Theme
from meta.views import MetadataMixin from meta.views import MetadataMixin
@ -163,7 +163,7 @@ class NewsTagCatalog(MetadataMixin, ListView):
class BlogsTagCatalog(MetadataMixin, ListView): class BlogsFilterCatalog(MetadataMixin, ListView):
model = Article model = Article
template_name = 'client/article/catalog.html' template_name = 'client/article/catalog.html'
catalog_url = '/blogs/tag/' catalog_url = '/blogs/tag/'
@ -171,12 +171,19 @@ class BlogsTagCatalog(MetadataMixin, ListView):
year = None year = None
month = None month = None
def get_queryset(self): def get_queryset(self, **kwargs):
slug = self.kwargs.get('slug') slug = self.kwargs.get('slug')
tag = get_object_or_404(Tag, url=slug) filter = self.kwargs['filter']
self.kwargs['tag'] = tag if filter == 'tag':
self.filter_object = tag tag = get_object_or_404(Tag, url=slug)
qs = Article.objects.blogs().filter(tag=tag) self.kwargs['tag'] = tag
self.filter_object = tag
qs = Article.objects.blogs().filter(tag=tag)
else:
theme = get_object_or_404(Theme, url=slug)
self.kwargs['theme'] = theme
self.filter_object = theme
qs = Article.objects.blogs().filter(theme = theme)
year = self.kwargs.get('year') year = self.kwargs.get('year')
if year: if year:
@ -201,8 +208,9 @@ class BlogsTagCatalog(MetadataMixin, ListView):
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(BlogsTagCatalog, self).get_context_data(**kwargs) context = super(BlogsFilterCatalog, self).get_context_data(**kwargs)
context['filter_object'] = self.filter_object context['filter_object'] = self.filter_object
context['type'] = 'article'
context['year'] = self.year context['year'] = self.year
context['month'] = self.month context['month'] = self.month
context['catalog_url'] = self.catalog_url context['catalog_url'] = self.catalog_url

@ -19,7 +19,7 @@
{% include 'client/includes/article/article_logo.html' with obj=object %} {% include 'client/includes/article/article_logo.html' with obj=object %}
<h1>{{ object.main_title }}</h1> <h1>{{ object.main_title }}</h1>
<strong><span>{{ object.publish_date|date:"d E Y" }}</span><a class="profile_link" href="{{ object.author.get_permanent_url }}" title="">{{ object.author.get_full_name }}</a></strong> <strong><span>{{ object.created|date:"d E Y" }}</span>{% if object.theme.all.exists %}{% include 'includes/article_theme.html' with obj=object %}{% endif %}</strong>
{% if request.user.is_admin %} {% if request.user.is_admin %}
<a target="_blank" class="button green " href="/admin/article/blog/{{ object.slug }}/">{% trans 'изменить' %}</a> <a target="_blank" class="button green " href="/admin/article/blog/{{ object.slug }}/">{% trans 'изменить' %}</a>
{% endif %} {% endif %}
@ -30,18 +30,6 @@
</div> </div>
<div class="blog_avtor"> <div class="blog_avtor">
<table>
<tr>
<th>{% trans 'Автор' %}:</th>
<td><a href="{{ object.author.get_permanent_url }}" title="">{% include 'includes/show_logo.html' with obj=object.author %}</a></td>
<td>
<h3><a href="{{ object.author.get_permanent_url }}" title="">{{ object.author.get_full_name }}</a></h3>
{% if object.author.profile.fb %}
<a href="{{ object.author.profile.fb }}" title="" class="facebook">{{ object.author.get_full_name }}</a>
{% endif %}
</td>
</tr>
</table>
{% if object.tag.all.exists %} {% if object.tag.all.exists %}
<div class="blog_avtor_right"> <div class="blog_avtor_right">
{% include 'includes/article_tags.html' with obj=object %} {% include 'includes/article_tags.html' with obj=object %}

@ -45,7 +45,8 @@
<script> <script>
EXPO.newsFilter.init({ EXPO.newsFilter.init({
theme:{ theme:{
placeholder:"{% trans 'Укажите тематику' %}" placeholder:"{% trans 'Укажите тематику' %}",
url:'http://{{ request.get_host }}/theme/get-tag/'
}, },
tags:{ tags:{
placeholder:"{% trans 'Выберите ключевые теги' %}", placeholder:"{% trans 'Выберите ключевые теги' %}",

@ -30,7 +30,15 @@
{% block page_title %} {% block page_title %}
<div class="page-title"> <div class="page-title">
<h1>{% if meta %}{{ meta.h1 }}{% else %}{% trans 'Новости' %}: <strong>{{ filter_object.name }}</strong>{% endif %}</h1> <h1>{% if meta %}
{{ meta.h1 }}
{% else %}
{% if type == "article" %}
{% trans 'Статьи' %}:
{% else %}
{% trans 'Новости' %}:
{% endif %}
<strong>{{ filter_object.name }}</strong>{% endif %}</h1>
</div> </div>
{% ifequal catalog_url '/news/tag/' %} {% ifequal catalog_url '/news/tag/' %}

@ -0,0 +1,6 @@
{% with theme=obj.theme.all %}
{% for theme in obj.theme.all %}
<a href="{{ obj.get_catalog }}theme/{{ theme.url }}/" title="">{{ theme.name }}</a>{% if forloop.counter != themes|length %},{% endif %}
{% endfor %}
{% endwith %}

@ -7,10 +7,11 @@ def get_tag(request):
#if request.is_ajax(): #if request.is_ajax():
themes = request.GET.getlist('themes[]') themes = request.GET.getlist('themes[]')
term = request.GET['term'].capitalize() term = request.GET['term'].capitalize()
if not term: qs = Tag.objects.language().exclude(theme__article__id=None).distinct()
qs = Tag.objects.language().filter(theme__id__in=themes).order_by('translations__name').distinct() if term:
else: qs = qs.filter(translations__name__contains=term)
qs = Tag.objects.language().filter(theme__id__in=themes, translations__name__contains=term).distinct() if themes:
qs = qs.filter(theme__id__in=themes).order_by('translations__name')
result = [{'id': tag.id, 'label': '%s (%s)'%(tag.name, tag.theme.name)} for tag in qs] result = [{'id': tag.id, 'label': '%s (%s)'%(tag.name, tag.theme.name)} for tag in qs]
result = sorted(result, key=lambda x:x['label']) result = sorted(result, key=lambda x:x['label'])

Loading…
Cancel
Save