Страницы

Поиск по вопросам

Показаны сообщения с ярлыком шаблоны. Показать все сообщения
Показаны сообщения с ярлыком шаблоны. Показать все сообщения

среда, 15 апреля 2020 г.

Вывод группами в django

#шаблоны #django

                    
Необходимо вывести нечто вроде этого:
Из массива вида ['1','2','3','4','5','6','7','8','9']. Как это лучше всего сделать, учитывая то, что количество элементов в массиве может быть любым (от 1 до бесконечности). Спасибо!


Ответы

Ответ 1



Помогло
{% for item in items %} {% if forloop.counter|divisibleby:"3" %}
{% endif %} {% endfor %}


четверг, 19 марта 2020 г.

Как сделать тему WP настраеваемой из админки

#cms #php #wordpress #вёрстка #шаблоны


Всем привет, подскажите плз или направьте где прочитать (поисковик толком не помог),
как сделать тему WP более гибкой (настраиваемой из меню админки). 
Тобишь чтоб в админке был пункт меню "Настройка темы" и там можно было добавлять/отключать
рекламные баннеры, вкл/откл слайдер, добавление лого или видеоролика. Чтоб далее не
флудить - заренее СПС ))    


Ответы

Ответ 1



Здесь все подробно описано: WordPress. Создаем удобную панель настроек Сегодня, мы подробно рассмотрим процесс создания страницы настроек для темы WordPress, на примере замечательного фреймворка WooFramework. Затем, мы немного усложним задачу, используя возможности jQuery, немного улучшим функциональность страницы.

суббота, 1 февраля 2020 г.

Автоматическое заполнение формы в Django Template

#python #forms #шаблоны #django


Добрый день.
Есть форма пользовательского профиля.
При выводе на экран ее надо заполнить данными текущего пользователя.
Как это можно сделать?
class Profile(models.Model):
    user = models.OneToOneField(User)
    img = models.ImageField(upload_to='user_pic/', blank=True, verbose_name='аватар')
    phone = models.IntegerField(max_length=10, verbose_name=u'контактный телефон')

class ProfileForm(forms.Form):
    first_name = forms.CharField(label=u'Имя', max_length=30, required=True)
    last_name = forms.CharField(label=u'Фамилия', max_length=30, required=True)
    password = forms.CharField(label=u'Пароль', widget=forms.PasswordInput, min_length=4,
required=True)
    email = forms.EmailField(label=u'E-mail', required=True)
    phone = forms.CharField(label=u'Контактный телефон', max_length=10, required=True)
    img = forms.ImageField(label=u'Ваш автар или логотип', required=False)

@render_to('profile.html')
def edit_profile(request):
    form = LoginForm()

 {{ form_profile.as_p }}

Хочется заполнять форму автоматически (руками в шаблоне чтобы особо ничего не расписывать). 
Спасибо!    


Ответы

Ответ 1



На сколько я понял, Вам необходмо воспользоваться наследованием форм от моделей документация. Используя правильное наследование формы от модели, вы сможете автоматически заполнять форму данными из уже существуещего обьекта: form = ProfileForm(instance=user)

Ответ 2



Например можно передать в форму словарь data = {'first_name': 'Ivan', 'last_name': 'Ivanov', 'email': 'a@b.ru'} form = ProfileForm(data) Попробуйте еще user = Profile.objects.get(user=self) form = ProfileForm(user) могу сильно ошибаться, т.к. не помню уже как можно узнать свой профайл

Где хранить общие для всех приложений теги шаблонов?

#python #веб_программирование #шаблоны #django


В документации сказано, что теги нужно хранить в папках templatetags приложений,
но бывают теги, которые нужно использовать во всём проекте. Понятно, что можно раскопипастить
всё по приложениям, но это не красиво :( Есть ли правильное решение этой проблемы?    


Ответы

Ответ 1



Мы для этих целей используем приложение utilites, вы можете назвать его как-нибудь еще. И там уже создавать теги, методы и классы, необходимые для работы другим приложениям. Копипастить конечно же ничего не надо. Просто в нужных вам местах делаете импорт необходимых модулей. В шаблонах соответственно load.

Ответ 2



Зачем же копипастить? Допустим в проекте projectus есть приложение app1 в котором в файле tags.py прописан тег/функция/класс avatar_src который используется в ругих приложениях. Что мешает делать from projectus.app1.tags import avatar_src в местах где он необходим?

воскресенье, 26 января 2020 г.

Переменные в шаблоне Django

#python #django #шаблоны


Хотелось бы использовать тег {% url %} дабы не хардкодить,в связи с чем столкнулся
со следующей проблемой:


Передаю модель,содержащую данные о страницах

{% for page in pagelist %}
Хочу на место параметра вставить имя страницы,но Django ругается на подобную запись

{% url 'blog.views.view' pagename={{page.name}} %}

{% endfor %}


Подскажите,пожалуйста,что я делаю не так
    


Ответы

Ответ 1



Как ответил @fobedep, в конструкциях {% %} переменные нужно использовать без {{ }}.

пятница, 24 января 2020 г.

Редактирование блоков в wordpress

#php #wordpress #шаблоны




У меня есть 2 блока на одной странице(1 блок со светлым фоном, 2 блок с тёмным фоном)Подскажите
что нужно прописать в index.php , чтобы можно было редактировать каждый блок отдельно?

    


Ответы

Ответ 1



Приветствую, тут есть два решения: Необходимо зарегистрировать произвольные области, например: ID, 'имя фрейма', true)); ?> и использовать их для своих нужд. Если все это есть на каждой странице, то необходимо создать облать для виджета в function.php, например: $args_footer1 = array( 'name' => __( 'Позиция footer колонка 1', 'wob_theme' ), 'id' => 'wob_theme_foooter1', 'description' => 'Колонка с произвольным текстом', 'class' => 'col-md-3 col-sm-6 inner', 'before_widget' => '
', 'after_widget' => '
', 'before_title' => '

', 'after_title' => '

' ); register_sidebar($args_footer1); и вызвать её, как нормальный человек в footer.php Более подробное описание: https://codex.wordpress.org/WordPress_Widgets https://codex.wordpress.org/Custom_Fields

понедельник, 6 января 2020 г.

Структура проекта. Сортировка классов на package, namespases, folders

#java #android #c_sharp #архитектура #шаблоны


Как правильно раскидывать классы на папки и namespace в VS и package в Java?  То
есть, другими словами, рекомендации по организации структуры проекта. 
Какие вообще есть стандартные папки (Часто встречал core, utils, support, additionals,
etc...)
И есть ли какие стандартные правила/рекомендации для разбиения.
Если нет, то хотя бы общее описание этих папок/пакетов.
Вопрос и для Java, и Java под android, и C#, если между ними в этом есть различия.
    


Ответы

Ответ 1



В C#, как правило, структура папок повторяет namespace классов, которые содержаться в этих папках. Solutions (.sln) содержат обыкновенно src папку с кодом. Пример сложного проекта можно посмотреть в исходниках CoreFx. Для проектов поменьше, обычно делают только один solution.

Ответ 2



.NET VisualStudio по-умолчанию предлагает следующий вариант: Solution состоит из одного или более проектов Корневой namespase проекта совпадает с именем проекта, это поведение можно изменить в свойствах проекта. Если в проекте есть вложенные папки, то в новых файлах классов к корневому namespase добавляются вложенные, с именами совпадающими с именами папок. Никаких ограничений на расположение и количество классов в файлах нет, за исключением одного - если класс содержит метод Main, то этот класс должен быть первым в файле чтобы его можно было запустить, во всяком случае студия на этом настаивает, обходить это ограничение не пробовал, не знаю. Стандартные папки проекта можно посмотреть создав проект в студии и изучив содержимое папки проекта, большинство из них служебные и не будут отображаться в обозревателе решений. Поведение студии по-умолчанию является всего лишь предлагаемым вариантом, следовать которому не обязательно. Все на усмотрение команды разработки и стандартов кода в компании. Java Из моего, довольно поверхностного, знакомства с java удалось выяснить следующее: Имя файла и класса в нем обязаны совпадать Один файл - один класс, за исключением вложенных классов разумеется (возможно что это не обязательно, не пробовал) Package (пакет) - фактически является папкой, т.е. структура папок и задает структуру пакетов По поводу Java могу местами ошибаться, т.к. повторюсь, не слишком много с ней работал, и не в курсе последних изменений. У Java, насколько я понимаю, как таковых стандартных папок нет, хотя, можно проделать такой же трюк как с VS в используемой вами IDE для Java. Если вы имели ввиду стандартные названия для папок с исходным кодом, то это определяется командой разработки и/или стандартами кода компании.

воскресенье, 5 января 2020 г.

С++ работа с памятью, шаблоны

#cpp #память #шаблоны #sizeof


#include 

using namespace std;

template 
int size(type a) {
    return sizeof(a);
}

int main() {
    int a[10] = {5};
    cout << size(a) << " " << sizeof(a) << endl; 
    return 0;
}


Здравствуйте! Пожалуйста можете объяснить почему size(a) возвращает 8, а sizeof(a)
- 40? И как внутри шаблона функции получить информацию об использованной массивом памяти?
Спасибо!
    


Ответы

Ответ 1



В данном случае a в шаблоне не будет массивом, так как массивы нельзя передавать по значению, а аргументы-массивы неявно переделываются в аргументы-указатели. В этом можно легко убедиться, добавив в метод проверку: static_assert(::std::is_same_v); Для корректного определения размера исходного объекта придется передавать его по ссылке: template ::std::size_t size(type const & a) { return sizeof(a); }

Ответ 2



Компилятор вполне может вычеслять type(по аргументу функции) как тип, содержащий столько то обьектов, так как может вызываться std::size. И для следующей программы: int a[15] = { 5 }; cout << size(a); //15 получим результат 15 В общем случаи всегда лучше аргументы шаблонной функции передавать по ссыльке и не использовать имена из стандартной библиотеки, и не использовать все имена из std (using namespace std )

пятница, 27 декабря 2019 г.

Как изменить символы в шаблоне, заменив {{ и }} на <% и %> ? -Golang

#golang #шаблоны


Есть хандлер  

func Handler(w http.ResponseWriter, r *http.Request) {    
    var templates = template.Must(template.ParseGlob("Templates/Main/*/*"))
    var doc bytes.Buffer 
    err := templates.ExecuteTemplate(&doc, "indexPage", nil)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    } 
    //templates.Delims("<%", "%>").Funcs(Main_TemplateFuncs).Parse("<%шаблон   %>")    
    fmt.Fprintln(w, &doc)
}  


Мне нужно переназначить символы {{ и }} , так как я использую в angularjs такие же
символы.
Есть функция templates.Delims("<%", "%>"), которая переназначет их, но она работает,
если после неё в Parse закинешь текст.
А у меня идёт множество файлов  template.Must(template.ParseGlob("Templates/Main//"))
и как мне их обработать, заменив стандартную обработку {{ и }}  на <% и %> ? 
    


Ответы

Ответ 1



templ := template.New("templ") //поменять символы templ.Delims("<%", "%>") //и парсить туда var templates = template.Must(templ.ParseGlob("Templates/Main/*/*"))

суббота, 21 декабря 2019 г.

Смешивание синтаксиса двух шаблонизаторов

#javascript #python #django #vuejs #шаблоны


Появилась такая проблема, есть Django приложение. Частично хотел начать переписывать
фронт на Vue, но встала проблема одинакового синтаксиса шаблонизаторов. {{ value }}
используется в обоих фреймворках и вроде бы я где-то находил решение подобной проблемы,
но к сожалению повторно найти не смог. Vue на первое время тянется из CDN, поэтому
делать SPA пока не вариант.
    


Ответы

Ответ 1



Кажется наиболее удобный способ - все Vue-шаблоны заключить в Django-теги: verbatim: {% verbatim %} {{header}} {% endverbatim %} Весь код внутри verbatim будет вставлен в результирующий html "как есть". Далее на стороне браузера Vue спокойно продолжит с ним работать

Ответ 2



Есть два способа решить эту проблему. На стороне Django: Использовать в шаблонах вместо {{ some_varibale }} монструозную конструкцию {% templatetag openvariable %} some_varibale {% templatetag closevariable %} На стороне Vue: Переопределить разделители var app = Vue({ el: '#app', delimiters: ['[[', ']]'] });

суббота, 14 декабря 2019 г.

Как ВКонтакте, Twitter и другие сервисы генерируют страницы?

#python #шаблоны #javascript #html


У почти у всех социальных гигантов переход на другую страницу происходит без перезагрузки.
Для этого они делают запрос, в ответ на который приходит шаблон страницы и данные.
Однако когда только пользователь открывает страницу они возвращают уже собранную страницу
из шаблона, при этом возвращая так же ее шаблон и данные. Неужели они дублируют код
страницы отдаваемой сервером и шаблоны которые отдаются javascript'у? Или есть какой
то шаблонизатор способный генерировать шаблоны как для javascript'а так и для серверной
части? Если кто знает такие библиотеки для python поделитесь.    


Ответы

Ответ 1



Вопрос это довольно таки обширный. Конечно, дублировать код страницы неэффективно с точки зрения затрат на поддержку проекта. В общем случае, всегда стараются избежать любого дублирования кода и контента. В простейшем случае обновлять всю страницу нет необходимости вообще. У сервера запрашивается лишь "сырая" информация в виде JSON / XML и на текущей странице заменяются соответствующие значения атрибутов или содержимого тегов. В случае, когда нужно заменять большую часть контента (переход на другую страницу без перезагрузки, например), стараются повторно использовать шаблоны. Шаблоны либо запрашиваются однократно при первом использовании, либо уже внедрены в JavaScript и загружены вместе со страницей. Могу предложить вам посмотреть на шаблонизатор mustache. Он имеет реализации для большинства используемых языков, включая Python, JavaScript и CoffeeScript. Для более глубокого изучения темы предлагаю для начала вот это – Интерактивные сайты. В частности, вот это – Повторное использование шаблонов.

Ответ 2



Есть некоторые фреймворки/библиотеки для создания универсальных (isomorphic) приложений, где "рендерить" может и клиент и сервер. Например, Redux. Гуглить в сторону "Изоморфное Приложение с React и Redux"

вторник, 10 декабря 2019 г.

Как указать пространство имен по-умолчанию в шаблоне проекта Visual Studio?

#c_sharp #visual_studio #шаблоны


Имеется проект с пространством имен по умолчанию Root.ProjectName. Впоследствии проект
экспортируется как шаблон с предварительным переименованием пространства имен ProjectName
во всех файлах проекта в $safeprojectname$. Проблема в том, что после создания проекта,
основанного на этом шаблоне, выкидывается исключение MissingManifestResourceException,
а пространство имен по умолчанию меняется с Root.ProjectName на ProjectName, где ProjectName
- это указанное пользователем имя проекта при создании.

Конечно, после ручного переименования все работает, но возникает вопрос: как принудительно
указать в шаблоне, что пространство имен по умолчанию состоит не только из имени проекта?
    


Ответы

Ответ 1



Когда Вы создаёте (экспортируете) шаблон, имя, которое пользователь введёт при создании проекта с использованием Вашего шаблона подставляется вместо переменной $safeprojectname$ во всех файлах проекта, в соответствии с содержимым файла TemplateName.csproj (где TemplateName это имя Вашего шаблона). Вот часть конфигурационного файла: Debug AnyCPU {$guid1$} Library Properties $safeprojectname$ $safeprojectname$ v4.5.2 512 Обратите внимание на содержимое тегов и . Если внутри вашего проекта будут вложенные директории, например, если корневое пространство имён шаблона - Root, а пространство имён внутри шаблона - Foo, соответственно, у Вас имеется класс с именем Root.Foo.SomeClass, то при создании проекта по шаблону, если проект будет назван пользователем MyRootSampleProject, то полное квалифицированное имя класса SomeClass - MyRootSampleProject.Foo.SomeClass, в результате никаких исключений не будет и всё будет компилироваться корректно, ведь это вполне ожидаемое поведение, поскольку создание шаблона предполагает переименование КОРНЕВОГО пространства имён проекта, а за формирование этого имени отвечает сам пользователь, использующий Ваш шаблон. Если же Вы, как пользователь хотите, чтобы перед всеми именами классов в созданном по шаблону проекте был какой-либо префикс, то нужно ввести вместо, скажем, имени MyRootSampleProject что-то вроде SolutionPrefix.MyRootSampleProject. Принудительно указать префикс в шаблоне не представляется возможным, да и трудно представить ситуацию, в которой это действительно будет нужно.

Ответ 2



При создании шаблона проекта, как правило, пространство имен в файлах переименовываются на $safeprojectname$. Но не всё можно заменить непосредственно в IDE. Если используется составное пространство имен (например: Root.ProjectName), то после экспорта шаблона в файле ProjectName.csproj необходимо вручную переименовывать параметр /Project/PropertyGroup/RootNamespace (например на Root.$safeprojectname$). В этом же файле можно переименовать параметры /Project/PropertyGroup/AssemblyName и /Project/PropertyGroup/DocumentationFile. Полный список поддерживаемых параметров шаблона можно посмотреть здесь.

понедельник, 15 июля 2019 г.

Добавление папок и файлов в конечный zip архив шаблона проекта VS 2015 во время сборки

Здравствуйте друзья!
После создания проекта Visual Studio (Visual C#\Extensibility\C# Project Template), удаления тега вместе с его содержимым в файле MyTemplate.vstemplate мы получаем вот такой проект:

После сборки этого проекта в папке **bin** образуется архив с двумя файлами:

Как настроить проект таким образом, что-бы при сборке в этот архив ложилась ещё произвольная папка с произвольными файлами из проекта?

При этом нельзя что-бы шаблон генерировал все эти файлы при запуске его ярлыка из VisualStudio(т.е. нельзя добавлять файлы в файл с расширением .vstemplate как я понимаю)
(А делать этого нельзя т.к. этот шаблон используется для вызова WizardTemplate который уже сам генерирует шаблон по пути который передан от самого Template. А собственно файлы которые находятся в шаблоне по условию нужно использовать в этом Wizard'e. Такие дела)
Заранее спасибо за помощь!


Ответ

Смог решить данную проблему с помощью Post Build Action. Файлы прикрепил к проекту с действием при компилляции "None", а в PostBuildAction написал скрипт доупаковку архива zip с помощью утилиты 7z.

среда, 3 апреля 2019 г.

Где хранить общие для всех приложений теги шаблонов?

В документации сказано, что теги нужно хранить в папках templatetags приложений, но бывают теги, которые нужно использовать во всём проекте. Понятно, что можно раскопипастить всё по приложениям, но это не красиво :( Есть ли правильное решение этой проблемы?


Ответ

Мы для этих целей используем приложение utilites, вы можете назвать его как-нибудь еще. И там уже создавать теги, методы и классы, необходимые для работы другим приложениям. Копипастить конечно же ничего не надо. Просто в нужных вам местах делаете импорт необходимых модулей. В шаблонах соответственно load.

среда, 5 декабря 2018 г.

Как лучше защить шаблон от копирования?

Есть несколько шаблонов на продажу для opencart и встал вопрос, каким методом пользоваться для выдачи лицензий на эти шаблоны?


Ответ

Стандартный вариант, по крайней мере среди русскоязычных авторов под Opencart - использование такой вещи, как ionCube. Естественно, что с его помощью нельзя защитить ваши html/css файлы, но обычно и защищают не их, а то, что вы упрячете в php, на уровни Model + Controller (если следовать модели MVC, а Opencart ей пытается следовать). Соответственно, и заинтересовать вашего покупателя нужно будет не столько красивым интерфейсом, сколько дополнительным функционалом под него.
Если же у вас чисто темы, то тут ничего не остается, кроме как (пытаться) выкладывать свои шаблоны на всяческие площадки для их продажи, начиная с templatemonster.com и заканчивая themeforest.net

понедельник, 3 декабря 2018 г.

Как изменить символы в шаблоне, заменив {{ и }} на <% и %> ? -Golang

Есть хандлер
func Handler(w http.ResponseWriter, r *http.Request) { var templates = template.Must(template.ParseGlob("Templates/Main/*/*")) var doc bytes.Buffer err := templates.ExecuteTemplate(&doc, "indexPage", nil) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } //templates.Delims("<%", "%>").Funcs(Main_TemplateFuncs).Parse("<%шаблон %>") fmt.Fprintln(w, &doc) }
Мне нужно переназначить символы {{ и }} , так как я использую в angularjs такие же символы. Есть функция templates.Delims("<%", "%>"), которая переназначет их, но она работает, если после неё в Parse закинешь текст. А у меня идёт множество файлов template.Must(template.ParseGlob("Templates/Main//")) и как мне их обработать, заменив стандартную обработку {{ и }} на <% и %> ?


Ответ

templ := template.New("templ") //поменять символы templ.Delims("<%", "%>") //и парсить туда var templates = template.Must(templ.ParseGlob("Templates/Main/*/*"))

воскресенье, 21 октября 2018 г.

Как ВКонтакте, Twitter и другие сервисы генерируют страницы?

У почти у всех социальных гигантов переход на другую страницу происходит без перезагрузки. Для этого они делают запрос, в ответ на который приходит шаблон страницы и данные. Однако когда только пользователь открывает страницу они возвращают уже собранную страницу из шаблона, при этом возвращая так же ее шаблон и данные. Неужели они дублируют код страницы отдаваемой сервером и шаблоны которые отдаются javascript'у? Или есть какой то шаблонизатор способный генерировать шаблоны как для javascript'а так и для серверной части? Если кто знает такие библиотеки для python поделитесь.


Ответ

Вопрос это довольно таки обширный.
Конечно, дублировать код страницы неэффективно с точки зрения затрат на поддержку проекта. В общем случае, всегда стараются избежать любого дублирования кода и контента.
В простейшем случае обновлять всю страницу нет необходимости вообще. У сервера запрашивается лишь "сырая" информация в виде JSON / XML и на текущей странице заменяются соответствующие значения атрибутов или содержимого тегов.
В случае, когда нужно заменять большую часть контента (переход на другую страницу без перезагрузки, например), стараются повторно использовать шаблоны. Шаблоны либо запрашиваются однократно при первом использовании, либо уже внедрены в JavaScript и загружены вместе со страницей.
Могу предложить вам посмотреть на шаблонизатор mustache. Он имеет реализации для большинства используемых языков, включая Python, JavaScript и CoffeeScript. Для более глубокого изучения темы предлагаю для начала вот это – Интерактивные сайты. В частности, вот это – Повторное использование шаблонов