Django: пути к шаблонам
Не осилил регулярное выражение для путей к шаблонам Django, поэтому написал несколько функций, облегчающих работу. Допустим, у нас такая структура каталогов:
/template
admin/
index.html
articles/
add.html
detail.html
list.html
news/
add.html
detail.html
list.html
desktop/
index.html
articles/
add.html
detail.html
list.html
news/
add.html
detail.html
list.html
urls.py
Есть много вариантов того, как написать urls.py, но я написал так:
from os.path import join
from django.conf.urls import include
from django.conf.urls import url
from django.views.generic import TemplateView
def template_url(folder, template):
return url(
'^' + template + '.html$',
TemplateView.as_view(template_name=(join(folder, template) + '.html'))
)
def urls_list(prefix, urls_list):
return [template_url(prefix, item) for item in urls_list]
admin = urls_list('admin', [
r'index.html',
r'articles/add',
r'articles/list',
r'articles/detail',
r'news/add',
r'news/list',
r'news/detail',
])
desktop = urls_list('admin', [
r'index.html',
r'articles/add',
r'articles/list',
r'articles/detail',
r'news/add',
r'news/list',
r'news/detail',
])
urlpatterns = admin + desktop
Данная простая конструкция заменяет огромные полотна такого вида:
from django.conf.urls import include
from django.conf.urls import url
from django.views.generic import TemplateView
admin = template_url('admin', [
url('^index.html$', TemplateView.as_view(template_name='admin/index.html')),
url('^articles/add.html$', TemplateView.as_view(template_name='admin/articles/add.html')),
url('^articles/list.html$', TemplateView.as_view(template_name='admin/articles/list.html')),
url('^articles/list.html$', TemplateView.as_view(template_name='admin/articles/list.html')),
url('^news/add.html$', TemplateView.as_view(template_name='admin/news/add.html')),
url('^news/list.html$', TemplateView.as_view(template_name='admin/news/list.html')),
url('^news/list.html$', TemplateView.as_view(template_name='admin/news/list.html')),
])
desktop = template_url('desktop', [
url('^index.html$', TemplateView.as_view(template_name='desktop/index.html')),
url('^articles/add.html$', TemplateView.as_view(template_name='desktop/articles/add.html')),
url('^articles/list.html$', TemplateView.as_view(template_name='desktop/articles/list.html')),
url('^articles/list.html$', TemplateView.as_view(template_name='desktop/articles/list.html')),
url('^news/add.html$', TemplateView.as_view(template_name='desktop/news/add.html')),
url('^news/list.html$', TemplateView.as_view(template_name='desktop/news/list.html')),
url('^news/list.html$', TemplateView.as_view(template_name='desktop/news/list.html')),
])
urlpatterns = admin + desktop
Последняя версия NodeJS через NPM
Наткнулся в сети на очень интересный способ обновления NodeJS до последней версии, не прибегая к услугам пакетного менеджера ОС. Ссылки на статью и оригинал:
В итоге у меня теперь ещё один фид в читаемых RSS.
Отмечу лишь, что установленную через пакетный менеджер версию нужно сначала вычистить из системы, так же рекомендуется удалить каталог /usr/local/lib/node_modules/
. Вот команды (NodeJS должен быть установлен, желательно - собран из исходников, это не так уж и сложно):
npm cache clean -f
npm install -g n
n stable
Angular Material и md-list - проблема с дополнительным действием
В Angular Material есть такой хороший компонент - md-list
, и работающий с ним в паре md-list-item
. Из них можно делать красивые списки, обладающие весьма важными свойствами. Во-первых, каждая строка реагирует на нажатие. Можно реализовать возможность перехода по ссылке. Во-вторых, к каждой строке можно добавить кнопку действия.
Это я всё к чему? А к тому, что сегодня почти час убил на то, чтобы разобраться, почему скопированный почти один в один пример с официальной доки работает у них и не работает у меня.
<md-list>
<md-list-item ng-repeat="item in items" ng-click="openDetail(item)">
<img class="md-avatar" alt="" src=""/>
<p>{{ item.name }}</p>
<md-icon class="material-icons md-secondary md-warn" ng-click="remove(item)">remove</md-icon>
</md-list-item>
</md-list>
md-icon
. Чтобы он превратился в кнопку, ему должен быть назначен среди прочих класс md-secondary
.Если кому интересно, то ниже код контроллера. Обратите внимание, я не отлавливаю объект события и не вызываю для него stopPropagation()
и preventDefault()
, это не требуется.
(function (A) {
"use strict";
var inject = [
'$location',
'$mdDialog',
'$scope'
];
function Ctrl(
$location,
$mdDialog,
$scope
){
// Ничто не мешает загружать записи с сервера
$scope.items = [
{id: 1, name: 'Запись №1'},
{id: 2, name: 'Запись №2'},
{id: 3, name: 'Запись №3'},
{id: 4, name: 'Запись №4'}
];
function openDetail(item){
// Переход на другой вид
$location.path('/items/' + item.id);
}
function remove(item){
// Запрос на удаление записи
$mdDialog.show(
$mdDialog
.confirm()
.title("Подтверждение")
.content('Удалить "' + item.name + '"?')
.ok("Да")
.cancel("Нет")
).then(function () {
$scope.items = $scope.items.splice($scope.items.indexOf(item), 1);
});
}
$scope.openDetail = openDetail;
$scope.remove = remove;
}
Ctrl.$inject = inject;
A.module('app').controller('Ctrl', Ctrl);
}(this.angular));
Сборка EMACS из исходников
Скачиваем пакет с исходным кодом с официального FTP проекта GNU:
wget ftp://ftp.gnu.org/gnu/emacs/emacs-24.5.tar.xz
tar xf emacs-24.5.tar.xz
Для поиска более новой версии можно воспользоваться этой ссылкой:
Хорошо, распаковали, но EMACS'у нужна куча библиотек для успешной сборки. Можно поставить те, что нужны для сборки 24 версии, которая идёт в стандартной поставке Ubuntu 14.04:
apt-get install build-essentials -y && apt-get build-deb emacs24
После установки можно запустить .configure и make:
cd emacs-24.5/
./configure && make && make install
Процесс начнётся. Если проверка зависимостей пройдёт успешно, будет запущена компиляция проекта, а затем его установка. Однако, в главном меню не появится значка для запуска EMACS, как это происходит при установке через aptitude или apt-get install. Добавим его вручную. Всего лишь нужно создать файл формата .desktop в каталоге /usr/share/applications:
cd /usr/share/applications/
touch emacs.desktop
Теперь в этот файл нужно вписать следующие строки:
[Desktop Entry]
Version=24.5
Name=GNU Emacs
Type=Application
Comment=GNU Emacs text editor
Terminal=false
Icon=emacs
Categories=TextEditor;IDE
GenericName=GNU Text Editor
Exec=env UBUNTU_MENUPROXY=0 /usr/local/bin/emacs
После сохранения и перезапуска DE (можно выйти из системы и войти снова) ярлык появится в главном меню.
Комментариев нет :
Отправить комментарий