def calculate(self): from app.db_manager.content_manager import get_tag_by_id, filter_tag_by_start_name if not self.args: self.args = '' self.args = self.args.strip() if re.search(r'\|', self.args): temp_args = self.args.split('|') temp_args[-1] = temp_args[-1].strip() if temp_args[-1] not in ['name', 'url']: raise ExpressionTypeError('表达式 tag 最后一个参数仅支持 ["name","url"]') tag = None if re.search(r'=', temp_args[0]): k, v = temp_args[0].split('=') k = k.strip() v = v.strip() if k == 'id': tag = get_tag_by_id(v) elif k == 'name': tag = filter_tag_by_start_name(v)[0] else: v = temp_args[0].strip() tag = get_tag_by_id(v) if not tag: tag = filter_tag_by_start_name(v)[0] else: raise ExpressionTypeError('表达式 tag 至少需要一个参数') if not tag: self.result = '' if temp_args[-1] == 'name': self.result = tag.name elif temp_args[-1] == 'url': self.result = tag.url()
def calculate(self): """ 解析结果,要重写 :return: :rtype: dict """ from app.db_manager.content_manager import get_category_by_id, filter_category_by_start_name, get_tag_by_id, \ filter_tag_by_start_name v = self.args['value'].strip() if self.args['type'] == 'url': return v elif self.args['type'] == 'cat': category = get_category_by_id(v) if not category: try: category = filter_category_by_start_name(v)[0] except: category = None if category: return category.url() else: return '' elif self.args['type'] == 'tag': tag = get_tag_by_id(v) if not tag: try: tag = filter_tag_by_start_name(v)[0] except: tag = None if tag: return tag.url() else: return ''
def get_context_data(self, **kwargs): tag_id = self.kwargs['tag_id'] context = super().get_context_data(**kwargs) tag = get_tag_by_id(tag_id) if not tag: raise Http404() context['tag'] = tag return context
def tag_article_list_view(request, tag_id): """ """ page = int(request.GET.get('page', 1)) tag = get_tag_by_id(tag_id) if not tag: raise Http404() t = get_tag_template(tag, page) return HttpResponse(t.get_html(request))
def get_aside_tags(): article_tag = ArticleTag.objects.values('tag_id').annotate( article_num=Count('id')).order_by('-article_num')[:20] aside_tags = [[get_tag_by_id(at['tag_id']), at['article_num']] for at in article_tag] fill_tags = [] if len(aside_tags) != 20: fill_tags = Tag.objects.exclude( id__in=[at['tag_id'] for at in article_tag])[:20 - len(article_tag)] fill_tags = [[t, 0] for t in fill_tags] return aside_tags + fill_tags
def detail_tag_view(request, tag_id): tag = get_tag_by_id(tag_id) if not tag: return JsonFailResponse({'code': 404, 'msg': '404'}) return JsonSuccessResponse(detail_tag_dict(tag))
def tag(self): from app.db_manager.content_manager import get_tag_by_id return get_tag_by_id(self.tag_id)