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):
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'}))
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)
@ -258,7 +258,7 @@ class BlogForm(forms.ModelForm):
class ArticleFilterForm(forms.Form):
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)
'''
@ -295,4 +295,4 @@ class NewsFilterForm(forms.Form):
super(NewsFilterForm, self).__init__(*args, **kwargs)
ids = [item['theme'] for item in list(Article.objects.news().values('theme').distinct())]
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 -*-
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('',
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/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}),

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

@ -19,7 +19,7 @@
{% include 'client/includes/article/article_logo.html' with obj=object %}
<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 %}
<a target="_blank" class="button green " href="/admin/article/blog/{{ object.slug }}/">{% trans 'изменить' %}</a>
{% endif %}
@ -30,18 +30,6 @@
</div>
<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 %}
<div class="blog_avtor_right">
{% include 'includes/article_tags.html' with obj=object %}

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

@ -30,7 +30,15 @@
{% block 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>
{% 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():
themes = request.GET.getlist('themes[]')
term = request.GET['term'].capitalize()
if not term:
qs = Tag.objects.language().filter(theme__id__in=themes).order_by('translations__name').distinct()
else:
qs = Tag.objects.language().filter(theme__id__in=themes, translations__name__contains=term).distinct()
qs = Tag.objects.language().exclude(theme__article__id=None).distinct()
if term:
qs = qs.filter(translations__name__contains=term)
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 = sorted(result, key=lambda x:x['label'])

Loading…
Cancel
Save