def caption(self, project=None): if hasattr(self.caption, '__call__'): c = force_text(self.caption(project)) if not c: c = humanize(force_text(self.name)) return c else: if self.caption is None: return l_or_humanize(self.name, prefix='label_') else: return self.caption
def try_to_login(self, request, login, password, active_only=True): '''Returns the user that matches provided login and pwd, or None''' login = force_text(login) password = force_text(password) # Make sure no one can sign in with an empty login or password if not login or not password: return None user = auth.authenticate(login, password) if not user or (not user.active and active_only): return None auth.login(request, user) return user
def __init__(self, name, url, options): if options['if'] and not hasattr(options['if'], '__call__'): raise ValueError("Invalid option 'if' for menu item '#{name}'") if options['html'] and not isinstance(options['html'], dict): raise ValueError("Invalid option 'html' for menu item '#{name}'") if options['parent'] == name: raise ValueError("Cannot set the 'parent' to be the same" " as this item") if options['children'] \ and not hasattr(options['children'], '__call__'): raise ValueError("Invalid option 'children' for" " menu item '#{name}'") self.name = name self.url = url self.condition = options['if'] self.param = options['param'] or 'id' self.caption = options['caption'] self.html_options = options['html'] or {} # Adds a unique class to each menu item based on its name self.html_options['class'] = ' '.join( set(filter(None, [self.html_options['class'], dasherize(force_text(self.name))] ))) self.parent = options['parent'] self.child_menus = options['children'] self.last = options['last'] or False super(self, self.name)
def set_home_view(self, request, object_id): page_content = self.get_object(request, object_id=unquote(object_id)) if page_content is None: raise self._get_404_exception(object_id) page = page_content.page if not page.has_change_permission(request.user): raise PermissionDenied("You do not have permission to set 'home'.") if not page.is_potential_home(): return HttpResponseBadRequest( force_text(_("The page is not eligible to be home."))) new_home_tree, old_home_tree = page.set_as_homepage(request.user) # Check if one of the affected pages either from the old homepage # or the homepage had an apphook attached if old_home_tree: apphooks_affected = old_home_tree.has_apphooks() else: apphooks_affected = False if not apphooks_affected: apphooks_affected = new_home_tree.has_apphooks() if apphooks_affected: # One or more pages affected by this operation was attached to an apphook. # As a result, fire the apphook reload signal to reload the url patterns. set_restart_trigger() info = (self.model._meta.app_label, self.model._meta.model_name) return HttpResponseRedirect( reverse("admin:{}_{}_changelist".format(*info)))
def __init__(self, name, url, options): if options['if'] and not hasattr(options['if'], '__call__'): raise ValueError("Invalid option 'if' for menu item '#{name}'") if options['html'] and not isinstance(options['html'], dict): raise ValueError("Invalid option 'html' for menu item '#{name}'") if options['parent'] == name: raise ValueError("Cannot set the 'parent' to be the same" " as this item") if options['children'] \ and not hasattr(options['children'], '__call__'): raise ValueError("Invalid option 'children' for" " menu item '#{name}'") self.name = name self.url = url self.condition = options['if'] self.param = options['param'] or 'id' self.caption = options['caption'] self.html_options = options['html'] or {} # Adds a unique class to each menu item based on its name self.html_options['class'] = ' '.join( set( filter(None, [ self.html_options['class'], dasherize(force_text(self.name)) ]))) self.parent = options['parent'] self.child_menus = options['children'] self.last = options['last'] or False super(self, self.name)
def render(self, name, value, attrs=None): if value is None: value = '' final_attrs = self.build_attrs(attrs, name=name) html = loader.render_to_string('sub_rst_hints.html') return format_html(html, flatatt(final_attrs), force_text(value))
def render(self, name, value, attrs=None, renderer=None): if value is None: value = '' final_attrs = self.build_attrs(attrs, {'name': name}) html = loader.render_to_string('sub_rst_hints.html') return format_html(html, flatatt(final_attrs), force_text(value))
def strip_tags(string, replacement=""): """ Returns the given HTML with all tags stripped. Based off of django.utils.html.strip_tags """ try: # attempt to add space for removed html elements in django 1.5.1 return django_html.strip_tags_re.replace(replacement, django_html.force_text(string)) except: return django_html.strip_tags(string)
def __init__(self, name, value, attrs, choice, index): super( WizardOptionWidgets.WizardOptionRenderer. WizardOptionInput, self).__init__(name, value, attrs, choice, index) try: wizard = wizard_pool.get_entry(choice[0]) self.label = force_text(choice[1]) self.description = wizard.widget_attributes[ 'description'] except (ValueError, KeyError): pass
def rest_json(value, arg=None): """ Renders a `ReturnDict` as used by the REST framework into a safe JSON string. """ if isinstance(value, (dict, OrderedDict, list, tuple)): data = JSONRenderer().render(value) elif not value: data = '{}' else: msg = "Given value must be of type dict, OrderedDict, list or tuple but it is {}." raise ValueError(msg.format(value.__class__.__name__)) return mark_safe(force_text(data))
def render(self, context): try: cart = CartModel.objects.get_from_request(context['request']) serializer = CartSerializer(instance=cart, context=context, label='dropdown', with_items=self.with_items) cart_data = JSONRenderer().render(serializer.data) except CartModel.DoesNotExist: cart_data = {'total_quantity': 0, 'num_items': 0} context.update({ 'cart_as_json': mark_safe(force_text(cart_data)), 'has_dropdown': self.with_items != CartItems.without, }) return self.get_template().render(context)
def render(self, name, value, attrs=None): if value is None: value = '' input_attrs = self.build_attrs(attrs, type=self.input_type, name=name) span_attrs = {} if value != '': # Only add the 'value' attribute if a value is non-empty. input_attrs['value'] = force_text(self._format_value(value)) if 'spinner_bind' in self.attrs: input_attrs['data-bind'] = self.attrs['spinner_bind'] del input_attrs['spinner_bind'] if 'spinner_message' in self.attrs: span_attrs['data-bind'] = self.attrs['spinner_message'] input_part = '<input{0} />'.format(flatatt(input_attrs)) span_part = '<span class="spinner-message" {0}></span>'.format(flatatt(span_attrs)) return mark_safe('<div>' + input_part + '<br/>' + span_part +'</div>')
def render(self, name, value, attrs=None): if value is None: value = '' final_attrs = self.build_attrs(attrs, type=self.input_type, name=name) if value != '': # Only add the 'value' attribute if a value is non-empty. final_attrs['value'] = force_text(self._format_value(value)) output = """ <div class="input-group date"> <input{0} /> <span class="input-group-addon"> <i class="fa fa-calendar"></i> </span> </div> """ return format_html(output, flatatt(final_attrs))
def render(self, name, value, attrs=None): if value is None: value = '' final_attrs = self.build_attrs(attrs, type=self.input_type, name=name) if value != '': # Only add the 'value' attribute if a value is non-empty. final_attrs['value'] = force_text(self._format_value(value)) t = "<input id='" + name + "-sp' style='position:relative;left: 5px;width: 80px;' maxlength='7' value='" + \ value + "' />" js_script = "<script type='text/javascript'>" js_script = js_script + "document.getElementsByName('" + name + "')[0]" \ ".addEventListener('input', function(e){ " \ "document.getElementById('" + name + "-sp').value = this.value; });" js_script = js_script + "document.getElementById('" + name + "-sp')" \ ".addEventListener('input', function(e){ console.log(this.value); " \ "document.getElementsByName('" + name + "')[0].value = this.value; });</script>" html = format_html('<input{0} style="width:65px;"/>' + t, flatatt(final_attrs)) + SafeText(js_script) return html
def link_to(title, url, attrs): final_attrs = {'href': mark_safe(smart_urlquote(url))} if attrs: final_attrs.update(attrs) return format_html('<a {1}>{0}</a>', force_text(title), flatatt(final_attrs))
def strip_entities(value): """Return the given HTML with all entities (&something;) stripped.""" # Note: Originally in Django but removed in v1.10 return re.sub(r'&(?:\w+|#\d+);', '', html.force_text(value))
def render_basic(self, value): return format_html_join( '\n', '<div class="{1}">{0}</div>', [(force_text(child), child.block_type != 'full_width_container' and 'block-%s block' % child.block_type or '') for child in value])
def render(self, name, value, attrs=None): if value is None: value = '' final_attrs = self.build_attrs(attrs, name=name) return format_html( ''' <ul class="nav nav-tabs"> <li class="active"><a data-toggle="tab" href="#rst_src"><span class="glyphicon glyphicon-edit"></span> Редактирование</a></li> <li><a data-toggle="tab" href="#rst_preview" id="preview_rst" class="xross" data-xevent="click" data-xmethod="POST" data-xtarget="rst_preview" data-xform="edit_form"><span class="glyphicon glyphicon-eye-open"></span> Предпросмотр</a></li> <li><a data-toggle="tab" href="#rst_help"><span class="glyphicon glyphicon-question-sign"></span> Справка</a></li> </ul> <div class="tab-content"> <div id="rst_src" class="marg__t_min tab-pane fade in active"> <textarea{0}>\r\n{1}</textarea> </div> <div id="rst_preview" class="marg__t_min tab-pane fade"></div> <div id="rst_help" class="marg__t_min tab-pane fade"> <div class="marg__b_mid"> <strong>Строки</strong> <div> Перевод строки трактуется как начало нового параграфа. </div> </div> <div class="marg__b_mid"> <strong>Ссылки</strong> <div> Ссылки на внешние ресурсы, начинающиеся с <i>http</i> форматируются автоматически.<br> Можно скрыть ссылку под именем, используя следующий код:<br><br> <pre><code class="nohighlight">Вставка ссылки `под именем<http://pythonz.net/>`_.</code></pre> </div> </div> <div class="marg__b_mid"> <strong>Начертание</strong> <div> Для выделения слова или фразы <b>полужирным</b> используйте обрамление в двойные звёзды:<br><br> <pre><code class="nohighlight">Выделение **полужирным**.</code></pre> Для выделения слова или фразы <i>курсивом</i> используйте обрамление в звёзды:<br><br> <pre><code class="nohighlight">Выделение *курсивом*.</code></pre> </div> </div> <div class="marg__b_mid"> <strong>Акцентирование</strong> <div> Слово или фразу можно <code>акцентировать</code> путём обрамления в двойные апострофы:<br><br> <pre><code class="nohighlight">Выделение ``акцентом``.</code></pre> </div> </div> <div class="marg__b_mid"> <strong>Цитаты</strong> <div> Для оформления цитаты, обрамите её в тройные апострофы:<br><br> <pre><code class="nohighlight">``` Это цитата. ```</code></pre> </div> </div> <div class="marg__b_mid"> <strong>Исходный код</strong> <div> Подсветка синтаксиса реализуется путём выделения кода в отдельный параграф, начинающийся с инструкции <b>.. code:: имя_языка</b>, где <i>имя_языка</i> — название языка программирования, например <i>python</i>:<br><br> <pre><code class="nohighlight">Некий текст. .. code:: python def my_function(): "just a test" print 8/2 И снова текст.</code></pre> * Обратите внимание на необходимость наличия двойного переноса строки после блока кода. </div> </div> <div class="marg__b_mid"> <strong>Gist от GitHub</strong> <div> Гисты могут быть вставлены в текст при помощи директивы <b>.. gist:: гитхаб_логин/ид_гиста</b>, где <i>гитхаб_логин</i> — логин на GitHub, а <i>ид_гиста</i> — идентификатор гиста.<br> Например, добавим гист с адреса <a href="https://gist.github.com/idlesign/c1255817bb0234d9971a">https://gist.github.com/idlesign/c1255817bb0234d9971a</a>:<br><br> <pre><code class="nohighlight">.. gist:: idlesign/c1255817bb0234d9971a</code></pre> * Обратите внимание на необходимость наличия переноса строки после блока кода.<br> ** Гисты можно создавать по адресу <a href="https://gist.github.com/" target="_blank">https://gist.github.com/</a> </div> </div> </div> </div> ''', flatatt(final_attrs), force_text(value))
def render(self, name, value, attrs=None): if value is None: value = '' final_attrs = self.build_attrs(attrs, name=name) return format_html(''' <ul class="nav nav-tabs"> <li class="active"><a data-toggle="tab" href="#rst_src"><span class="glyphicon glyphicon-edit"></span> Редактирование</a></li> <li><a data-toggle="tab" href="#rst_preview" id="preview_rst" class="xross" data-xevent="click" data-xmethod="POST" data-xtarget="rst_preview" data-xform="edit_form"><span class="glyphicon glyphicon-eye-open"></span> Предпросмотр</a></li> <li><a data-toggle="tab" href="#rst_help"><span class="glyphicon glyphicon-question-sign"></span> Справка</a></li> </ul> <div class="tab-content"> <div id="rst_src" class="marg__t_min tab-pane fade in active"> <textarea{0}>\r\n{1}</textarea> </div> <div id="rst_preview" class="marg__t_min tab-pane fade"></div> <div id="rst_help" class="marg__t_min tab-pane fade"> <div class="marg__b_mid"> <strong>Строки</strong> <div> Перевод строки трактуется как начало нового параграфа. </div> </div> <div class="marg__b_mid"> <strong>Ссылки</strong> <div> Ссылки на внешние ресурсы, начинающиеся с <i>http</i> форматируются автоматически.<br> Можно скрыть ссылку под именем, используя следующий код:<br><br> <pre><code class="nohighlight">Вставка ссылки `под именем<http://pythonz.net/>`_.</code></pre> </div> </div> <div class="marg__b_mid"> <strong>Начертание</strong> <div> Для выделения слова или фразы <b>полужирным</b> используйте обрамление в двойные звёзды:<br><br> <pre><code class="nohighlight">Выделение **полужирным**.</code></pre> Для выделения слова или фразы <i>курсивом</i> используйте обрамление в звёзды:<br><br> <pre><code class="nohighlight">Выделение *курсивом*.</code></pre> </div> </div> <div class="marg__b_mid"> <strong>Акцентирование</strong> <div> Слово или фразу можно <code>акцентировать</code> путём обрамления в двойные апострофы:<br><br> <pre><code class="nohighlight">Выделение ``акцентом``.</code></pre> </div> </div> <div class="marg__b_mid"> <strong>Цитаты</strong> <div> Для оформления цитаты, обрамите её в тройные апострофы:<br><br> <pre><code class="nohighlight">``` Это цитата. ```</code></pre> </div> </div> <div class="marg__b_mid"> <strong>Исходный код</strong> <div> Подсветка синтаксиса реализуется путём выделения кода в отдельный параграф, начинающийся с инструкции <b>.. code:: имя_языка</b>, где <i>имя_языка</i> — название языка программирования, например <i>python</i>:<br><br> <pre><code class="nohighlight">Некий текст. .. code:: python def my_function(): "just a test" print 8/2 И снова текст.</code></pre> * Обратите внимание на необходимость наличия двойного переноса строки после блока кода. </div> </div> <div class="marg__b_mid"> <strong>Gist от GitHub</strong> <div> Гисты могут быть вставлены в текст при помощи директивы <b>.. gist:: гитхаб_логин/ид_гиста</b>, где <i>гитхаб_логин</i> — логин на GitHub, а <i>ид_гиста</i> — идентификатор гиста.<br> Например, добавим гист с адреса <a href="https://gist.github.com/idlesign/c1255817bb0234d9971a">https://gist.github.com/idlesign/c1255817bb0234d9971a</a>:<br><br> <pre><code class="nohighlight">.. gist:: idlesign/c1255817bb0234d9971a</code></pre> * Обратите внимание на необходимость наличия переноса строки после блока кода.<br> ** Гисты можно создавать по адресу <a href="https://gist.github.com/" target="_blank">https://gist.github.com/</a> </div> </div> </div> </div> ''', flatatt(final_attrs), force_text(value))