2017-01-11 40 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