2017-01-11 53 views
2

我是相當新的Django,我希望我能夠正確地制定我的問題,請裸露在我身邊。使用Django Logic來添加CSS類基於URL與slu 012

我有什麼權利現在:

一個簡單的個人網站,一個博客節。當我從導航欄轉到不同的列表項目時,如果li處於活動狀態,它將添加一個「激活」類。問題發生在我的博客部分。

我想實現:

當我添加了「激活」類的博客節和博客這樣的鏈接將被激活。我用我的帖子網址slu g。

我有什麼權利現在它不工作:

template.html

<li class="{% if request.resolver_match.url_name == "index" %}activate{% endif %}"><a href='/'>Home</a></li> 
<li class="{% if request.resolver_match.url_name == "blog" %}activate{% endif %}"><a href='/blog/'>Blog</a></li> 
<li class="{% if request.resolver_match.url_name == "photohraphy" %}activate{% endif %}"><a href='/photography/'>Photography</a></li> 

models.py

from django.db import models 
from django.core.urlresolvers import reverse 

class Post(models.Model): 
    title = models.CharField(max_length=250) 
    slug = models.SlugField(max_length=250) 
    body = models.TextField() 
    date = models.DateTimeField() 
    updated = models.DateTimeField(auto_now=True) 

    def get_absolute_url(self): 
     return reverse('blog:post_detail', args=[self.slug]) 


    def __str__(self): 
     return self.title 

urls.py

from django.conf.urls import url, include 
from django.views.generic import ListView, DetailView 
from blog.models import Post 
from . import views 

urlpatterns = [ 
    url(r'^$', views.list_of_post, name='list_of_post'), 
    url(r'^(?P<slug>[-\w]+)/$', views.post_detail, name='post_detail') 

views.py

from django.shortcuts import render, get_object_or_404 
from .models import Post 

def list_of_post(request): 
    post = Post.objects.all() 
    template = 'blog/blog.html' 
    context = {'post': post} 
    return render(request, template, context) 

def post_detail(request, slug): 
    post = get_object_or_404(Post, slug=slug) 
    template = 'blog/post.html' 
    context = {'post': post} 
    return render(request, template, context) 

我知道,我必須添加一些神社邏輯在李類,但我不知道如何正確設置它。我想這與get_absolute_url有關。有人可以建議一種簡單而正確的方法嗎?

謝謝你這麼多

+0

請更正'urls.py',並添加'viewsy.py'如果你能:) – opalczynski

+0

的urls.py似乎正常工作。我不明白我應該改正什麼。我添加了views.py。謝謝! – IoanCosmin

+0

我可以看到,urls.py實際上是models.py - 可能你只是複製了兩次... – opalczynski

回答

0

我假設所有頁面都沒有Ajax調用渲染。在這種情況下,無論您正在呈現哪個網頁,只要在網址for eg. return self.render_to_response({'page': 'index'})中傳遞頁面的名稱(如果其網址爲index)即可。然後在模板中,您可以使用簡單的條件並設置激活的類。例如。

<li class="{% if page == "index" %}activate{% endif %}"><a href='/'>Home</a></li> 
 
<li class="{% if page == "blog" %}activate{% endif %}"><a href='/blog/'>Blog</a></li> 
 
<li class="{% if page == "photography" %}activate{% endif %}"><a href='/photography/'>Photography</a></li>

+0

你好Rajesh。感謝您的解決方案。你能更精確些嗎?我不太明白我需要更改什麼, – IoanCosmin

+0

請單擊您的列表中的任意鏈接,發送請求並返回處理的視圖。現在從這個特定的視圖中,您可以發送一個變量回到模板,告訴模板它是哪個頁面。進一步在你的模板中,你已經創建了這些基於'li'的菜單,如果條件正如我已經演示的,檢查變量是否等於鏈接指向的頁面,你可以放入。如果是,請添加激活的類。而已。所以,在''blog /''返回'self.render_to_response({'page':'blog'})指向的視圖中' –

+0

我試過了你的方法,它不起作用。很明顯,我做錯了什麼。您能否確切指出我需要在代碼中更改哪些內容才能使其工作?謝謝! – IoanCosmin