Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 19, 2013 01:02:29

Minuteman
Зарегистрирован: 2013-08-19
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

URL like http://site.com/category_slug/post_slug.html

Доброго времени суток!

Я новичок в джанго, поэтому прошу строго не судить.
Использую версию джанго:

ria ~ $ django-admin.py --version
1.5.1
хотя не думаю что особо влияет…
Настроил я посты и категории. Связал их. Посты прекрасно выводятся, категории тоже, но судя по всему с регулярными выражениями у меня проблема. Прошу помочь, если кто знает.
Хочу добиться url как
http://site.com/category_slug/post_slug.html

Вот код model.py:

class BlogPost(models.Model):
    title = models.CharField(max_length = 150)
    slug = models.CharField(
        max_length = 120,
        unique=True
    )
    category = models.ForeignKey('blog.Category', blank=True, null=True)
      
    def get_image(self):
        """Get upload_to path specific to this photo."""
        return self.image.url
    
    def __unicode__(self):
        return '%s' % self.title
    @permalink
    def get_absolute_url(self):
        return (
            'view_post', 
            None, 
            { 
                'slug': self.slug,
                #'category' : self.category 
            }
        )
class Category(models.Model):
    title = models.CharField(max_length=100, db_index=True)
    slug = models.SlugField(max_length=100, db_index=True)
    def __unicode__(self):
        return '%s' % self.title
    @permalink
    def get_absolute_url(self):
        return ('view_blog_category', None, { 'slug': self.slug })


Вот кусок контроллера:
где сама логика отвечающая за вывод поста:

def view_post(request, slug):   
    return render_to_response('view_post.html', {
        'post': get_object_or_404(BlogPost, slug=slug)
    })

В сам view_post.html помещаю пока что такое:
  {{post.title}}
  {{post.body|safe}}

Ну и наконец urls.py:
url(
        #r'^news/(?P<category>\d+)/(?P<slug>[^\.]+).html',
        r'^news/(?P<slug>[^\.]+).html',
        #r'^(?P<category>\d+)/(?P<slug>[^\.]+)', 
        'blog.views.view_post', 
        name='view_post'
    ),

Как видите, там я пытался впихнуть категорию разными способами, но не получалось.
С форматом как http://site.com/news/post_slug_one.html работает, а вот вместо news категорию для поста никак.
И еще категория для поста одна и только одна.
Прошу помощи.
Заранее благодарен.

Отредактировано Minuteman (Авг. 19, 2013 01:03:55)

Офлайн

#2 Авг. 19, 2013 10:30:12

inoks
От: Russia
Зарегистрирован: 2012-12-11
Сообщения: 343
Репутация: +  35  -
Профиль   Адрес электронной почты  

URL like http://site.com/category_slug/post_slug.html

Minuteman
Как видите, там я пытался впихнуть категорию разными способами, но не получалось.

что именно не получилось?

view_post параметр принимало?

Офлайн

#3 Авг. 20, 2013 01:11:37

Minuteman
Зарегистрирован: 2013-08-19
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

URL like http://site.com/category_slug/post_slug.html

inoks
что именно не получилось?

view_post параметр принимало?

в urls.py добавил:

url(
        r'^(?P<category>\d+)/(?P<slug>[^\.]+).html',  #вот тут я так понимаю мне слаг нужен но как его взять?
        'blog.views.view_post', 
        name='view_post'
    ),

Но как мне подставить не числовое значение которое хранится в таблице а уже взять готовый slug?

в models.py добавил слаг категории

@permalink
    def get_absolute_url(self):
        return (
            'view_post', 
            None, 
            { 
                'slug': self.slug,
                ######################
                'category' : self.category #здесь сомнительно 
            }
        )
в views.py добавил в параметр категорию но думаю мало что оно даст:
def view_post(request, slug, category):   # здесь тоже category нужен?
    return render_to_response('view_post.html', {
        'post': get_object_or_404(BlogPost, slug=slug)
    })

так как мне достаточно пока слага для определения…

Как более простым способом вставить слаг категории в url?
Таблица category состоит из трех полей id, title и slug. По id к таблице Blogpost таблица category связана через foreignkey. В коде это выше есть.

Результатом работы является пустая строка вместо ссылки для каждого поста.

Заранее спасибо.

Отредактировано Minuteman (Авг. 20, 2013 01:16:40)

Офлайн

#4 Авг. 20, 2013 10:27:47

inoks
От: Russia
Зарегистрирован: 2012-12-11
Сообщения: 343
Репутация: +  35  -
Профиль   Адрес электронной почты  

URL like http://site.com/category_slug/post_slug.html

Как то так:

urls.py
url(r'^(?P<category_slug>[^\.]+)/(?P<post_slug>[^\.]+).html', 'blog.views.view_post', name='view_post'),

views.py

def view_post(request, category_slug, post_slug):

models.py

@models.permalink
def get_absolute_url(self):
	return ('view_post', (), {
       	'category_slug': self.category.slug,
       	'post_slug': self.slug,
       	})

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version