LINUX.ORG.RU

Начал учить Django. Чем следует заняться?


0

0

Я не так давно начал учить Django, мне оно понравилось, однако я понял, что для того, чтобы осилить ее как следует, нужно написать на ней что-то осязаемое. Можете посоветовать, что бы такое начать писать? Не присоединиться ли к какому-нибудь открытому проекту?


стену для ЛОРа, как фкантакти!

Zhbert ★★★★★ ()
Ответ на: комментарий от yirk

Лучше уж байтфлоу дописывать. Там вроде Пиранья искал девелоперов.

А вообще есть куча интересных задач. Например поиграть с плагинами для django-cms. Или запатчить ту же django-cms или (и) django-localeurl на предмет «у каждого языка свой домен». Как решивший обе эти задачи, сообщаю - интересно. :)

solshark ()

Вопросы по Django:

1. Какие используются встроенные механизмы URL? И есть ли они, вообще? Т.е. определены ли методы, типа:

    def link(self):
        return "<a href="%s">%s</a>" % ( self.url, self.title )

2. Как включить индикацию ошибок по обращению к несуществующим полям в шаблоне? Т.е. чтобы {{ object.link }} выдавало ошибку или предупреждение, если метод или свойство link не определены?

KRoN73 ★★★★★ ()
Ответ на: комментарий от KRoN73

> 1. Какие используются встроенные механизмы URL?

http://docs.djangoproject.com/en/dev/ref/templates/builtins/#url

2. Как включить индикацию ошибок по обращению к несуществующим полям в шаблоне?

http://docs.djangoproject.com/en/dev/ref/templates/api/#how-invalid-variables...

anonymous ()
Ответ на: комментарий от anonymous

Спасибо. Но затык встретился ещё на пути к этому.

Питон и юникод...

Есть

title = models.CharField(max_length=200).
Есть
def get_absolute_url(self):
    return ('goldenfront.catalogue.views.item', [str(self.id)])
Задача - сделать метод, возвращающий '<a href=«url»>title</a>'.

Понятно, что при нормальной работе с юникодом ожидается:

def titled_link(self):
    return '<a href="%s">%s</a>' % ( self.get_absolute_url(), self.title() )

Но я наталкиваюсь на такое:

     38     def get_absolute_url(self):
     39         return ('goldenfront.catalogue.views.item', [str(self.id)])
     40 
     41     def titled_link(self):
---> 42         return u'%s as %s' % ( self.get_absolute_url(), self.title() )

UnicodeDecodeError: 'ascii' codec can't decode byte 0xd0 in position 38: ordinal not in range(128)

Игры с указанием юникодовости строки, .decode() или .encode() не помогают. Куда копать? ... Я, почему-то, думало, что юникод в Питоне «из коробки» работает без всяких костылей :-/

KRoN73 ★★★★★ ()
Ответ на: комментарий от KRoN73

return ('goldenfront.catalogue.views.item', [str(self.id)])

Ну, это не будет возращать absolute_url. Скорее так:

return reverse('goldenfront.catalogue.views.item', args=[self.id])

http://docs.djangoproject.com/en/dev/topics/http/urls/#reverse

А зачем хтмл в модели? Если лень писать код ссылки в шаблоне, лучше создать тэг для этого, типа {% titled_link object %}. Например: http://docs.djangoproject.com/en/1.1/ref/templates/builtins/#urlize

Игры с указанием юникодовости строки, .decode() или .encode() не помогают. Куда копать?

В начале файла забей «#coding: utf-8».

anonymous ()
Ответ на: комментарий от KRoN73

Насколько я понял, тебе нужно делать так в шаблоне:

 <a href="{% url catalogue.views.item object.id %}">{{ object.title }}</a> 
anonymous ()
Ответ на: комментарий от anonymous

Ну, это не будет возращать absolute_url

И примера брал какого-то с оф. сайта. На практике работает, результат такой же, как с твоим вариантом.

Если лень писать код ссылки в шаблоне, лучше создать тэг для этого

Логично.

В начале файла забей «#coding: utf-8».

Это разве не указание на сорцы исходника?

...

Сейчас ошибка такая:

---> 44     def titled_link(self):
     45         return '%s as %s' % ( self.get_absolute_url(), self.title() )

TypeError: 'unicode' object is not callable

KRoN73 ★★★★★ ()
Ответ на: комментарий от KRoN73

>Это разве не указание на сорцы исходника?
Вообще, да. Но лучше так сделать сразу чтобы не было проблем.

self.title() )

self.title

tia ()
Ответ на: комментарий от tia

self.title() )

self.title

Просто смущает:

In [18]: i1.title
Out[18]: u'\u0413\u0435\u043e\u0440\u0433\u0438\u0439 \u041f\u043e\u0431\u0435\u0434\u043e\u043d\u043e\u0441\u0435\u0446'

In [19]: i1.get_absolute_url
Out[19]: <bound method Item._curried of <Item: Георгий Победоносец>>

In [20]: i1.get_absolute_url()
Out[20]: '/catalogue/item/2/'

...

По своему тэгу в шаблоне. В документации предлагается вариант с инициализацией по «{% load some %}». Или на отдельное приложение (application). Можно ли подключить свой тэг сразу для всего проекта?

KRoN73 ★★★★★ ()
Ответ на: комментарий от KRoN73

> Можно ли подключить свой тэг сразу для всего проекта?

Он и доступен для всего проекта. load загружает его в любой шаблон любого приложения.

anonymous ()
Ответ на: комментарий от anonymous

>Он и доступен для всего проекта. load загружает его в любой шаблон любого приложения.

Да, но если я правильно понимаю, этот load требуется вставлять в каждый шаблон.

KRoN73 ★★★★★ ()
Ответ на: комментарий от Zhid

Да я уже поюзал чуть-чуть, мне хватило.

anonymous ()

Начни писать свой блог или движок для интернет-магазина. Время проведешь интересно и с пользой. Если получится что-то хорошее - сможешь выложить в opensource или влить наработки/предложить_опыт в уже существующие проекты. Сразу лезть быдлокодить в открытый проект, наверное, не стоит.

dens-dens-dens ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.