def link(self): """Ссылка на товар/услугу""" link = '/product/%s/' % self.id if self.code and self.name: link = '/product/%s-%s/' % (translit(self.name), self.code) elif self.name: link = '/product/%s-%s/' % (translit(self.name), self.id) return link
def fetch_mapa(self): """Получить ссылки на разделы""" content = None while not content: try: r = requests.get(self.domain, headers=self.headers) content = r.text except Exception as e: logger.info('[ERROR]: %s' % e) tree = lxml_html.fromstring(content) box = tree.xpath('//div[@id="categories-2"]')[0] ahrefs = box.xpath('.//ul/li/a') result = [{ 'href': link.attrib.get('href'), 'name': link.text, } for link in ahrefs] for menu in result: name = menu['name'].strip() link = '/phones/%s/' % translit(name) analog = Blocks.objects.filter(container=self.container, name=name).first() if not analog: analog = Blocks.objects.create(container=self.container, name=name, link=link, state=4) menu['block'] = analog return result
def create_menu_link(self, force: bool = False): """Создание ссылки для меню 1) Только тип ссылка (state=4) Только без уже имеющейся ссылки 2) Только с именем Только с типом контейнера меню (state=1) :param force: создать ссылку независимо от типа контейнера """ if not self.state == 4 or not self.name: return if not force: if not self.container.state == 1 or self.link: return link = None # -------------------------------------------------- # Если есть родительская ссылка, нужно ее подставить # -------------------------------------------------- parents = None if self.parents: if '_' in self.parents: parent = self.parents.split('_')[-1] try: parent = int(parent) except ValueError: parent = None if parent: parent_menu = Blocks.objects.filter(pk=parent).values_list( 'link', flat=True).first() if parent_menu: link = parent_menu if link: link += translit(self.name) + '/' else: link = '/' + translit(self.name) + '/' link = fix_multiple_dashes(link) self.link = link
def fast_create_props(request): """Быстрое создание свойств пачкой :param request: HttpRequest """ result = {} perms = get_user_permissions(request.user, props_vars['model']) if not request.method == 'POST' or not request.POST.get( 'props') or not perms['create']: result['error'] = 'Недостаточно прав' if not perms[ 'create'] else 'Нет данных для сохранения' return JsonResponse(result, safe=False) props = [] props_count = request.POST.get('props', 0) try: props_count = int(props_count) except ValueError: return JsonResponse(result, safe=False) for i in range(props_count): props.append({ 'name': request.POST.get('name_%s' % i).strip(), 'code': request.POST.get('code_%s' % i).strip(), }) already_exists = 0 created = 0 for prop in props: if not prop['name']: continue code = prop['code'] or translit(prop['name']) analog = Property.objects.filter(code=code) if analog: already_exists += 1 continue analog = Property.objects.create(name=prop['name'], code=code) created += 1 result['success'] = 'Данные успешно сохранены' if already_exists: result['success'] += '<br>Уже найдено свойств: %s' % already_exists result['success'] += '<br>Добавлено новых свойств: %s' % created if not created: result['error'] = 'Не добавлено ни одного свойство' return JsonResponse(result, safe=False)
def feedback_form(request, q_string: dict = None, files: list = None, lang: str = 'ru', fields: list = None): """Форма обратной связи q_string используем для дополнительных полей, которые хотим обработать аналогично fv """ if not q_string: q_string = {} if not files: files = [] if not fields: fields = [] fv = { 'ifuser': None, 'phone': None, 'name': None, 'email': None, 'address': None, 'recall': None, 'msg': None, 'file': None, } # ---- # POST # ---- if request.method == 'POST': for key in fv: values = request.POST.getlist(key) items = [item.strip() for item in values if item.strip()] if len(items) == 1: items = items[0] fv[key] = items q_string[key] = items # -------------------------------- # Заносим все отправленные данные, # которые еще не занесены # -------------------------------- for key, value in request.POST.items(): if not key in fv: fv[key] = value if request.FILES: if request.FILES: failo = request.FILES.get('file') if failo: name = translit(failo.name) ext = '' if '.' in failo.name: name = failo.name.split('.')[0] ext = '.%s' % failo.name.split('.')[-1] fname = name + ext # --------------------------------------------------- # mail.attach(fname, failo.read(), failo.content_type) # --------------------------------------------------- fv['file'] = { 'name': fname, 'content': failo.read(), 'content_type': failo.content_type, } lang_vars = { 'ru': [ ('name', 'ФИО'), ('email', 'Email'), ('phone', 'Телефон'), ('address', 'Адрес'), ('recall', 'Пользователь хочет, чтобы вы ему перезвонили'), ('msg', 'Сообщение пользователя'), ], 'en': [ ('name', 'User Name'), ('email', 'Email'), ('phone', 'Phone'), ('address', 'Address'), ('recall', 'User wait for you call him'), ('msg', 'Message'), ], } fv['result'] = '<br>\n'.join([ '%s: %s' % (item[1], request.POST.get(item[0])) for item in lang_vars[lang] if request.POST.get(item[0]) ]) # ------------------- # Дополнительные поля # ------------------- for field in fields: key = request.POST.get(field['name']) if key: fv['result'] += '<br>\n%s: %s' % (field['value'], key) # -------------- # Служебные поля # -------------- sys_fields = ( ('ip', request.META.get('REMOTE_ADDR')), ('referer', request.META.get('HTTP_REFERER')), ('browser', request.META.get('HTTP_USER_AGENT')), ) fv_sys = '<br>\n'.join( ['%s: %s' % (item[0], item[1]) for item in sys_fields if item[1]]) fv['result'] += '<br><br>\n\n%s' % fv_sys domain = request.META.get('HTTP_HOST', '') #.decode('idna') fv['domain'] = domain fv['title'] = '%s Пользователь оставил сообщение %s' % ( domain, datetime.datetime.today().strftime('%d-%m-%Y %H:%M')) fv['emails'] = feedback_emails() fv['sender'] = settings.EMAIL_HOST_USER return fv
def translit_tag(text: str): """Транслит :param text: текст""" return translit(text)
def find_genre_altname(self, z=0): if self.name: self.altname = translit(self.name)