2013-03-19 81 views
4

可悲的django初學者在某些視圖中獲得了靜態文件(css,js)的阻擋問題。主要是,在主頁上,這些靜態文件是完全可訪問的,但在不同的頁面上,它不會和佈局完全打破。django {{STATIC_URL}}有時不起作用

這是我的settings.py:

INSTALLED_APPS = (
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.sites', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'django.contrib.admin', 
    'bands', 
    'lyrics', 
    'articles', 
) 
PROJECT_DIR = os.path.dirname(__file__) 
STATIC_ROOT = '' 
STATIC_URL = '/static/' 
STATICFILES_DIRS = (
    os.path.join(PROJECT_DIR, "static"), 
) 
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
) 

這是我的基地通用模板的一部分,該意見擴大:

<link rel="Shortcut icon" href="{{ STATIC_URL }}img/favicon32.png" /> 
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/bootstrap.css"> 
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script> 
<script type="text/javascript" src="http://code.jquery.com/ui/1.10.1/jquery-ui.min.js"></script> 
<script type="text/javascript" src="{{ STATIC_URL }}js/sortable.js"></script> 

在呈現時,它返回這樣的代碼(這是我想要):

<link rel="Shortcut icon" href="/static/img/favicon32.png" /> 
<link rel="stylesheet" type="text/css" href="/static/css/bootstrap.css"> 
<script type="text/javascript" src="http://code.jquery.com/jquery-1.9.1.min.js"></script> 
<script type="text/javascript" src="http://code.jquery.com/ui/1.10.1/jquery-ui.min.js"></script> 
<script type="text/javascript" src="/static/js/sortable.js"></script> 

這是主頁視圖(靜態文件工作的那個)的代碼:

def slider(request): 
    context = Context ({ 'articles': Article.objects.order_by('-created_at')[:5] }) 
    return render(request, 'articles/slider.html', context) 

,這是不訪問靜態文件的視圖(它使用在Django文檔中發現分頁爲例):

def archive(request, page="1"): 
    articles_list = Article.objects.all().filter(active=True) 
    paginator = Paginator(articles_list, 6) 
    try: 
     articles = paginator.page(page) 
    except PageNotAnInteger: 
     articles = paginator.page(1) 
    except EmptyPage: 
     articles = paginator.page(paginator.num_pages) 
    context = Context({ 
     'articles': articles 
    }) 
    return render_to_response('articles/archive.html', context) 

如果任何人有一個猜測可能是錯誤的,請讓我知道。

當前項目的代碼可作爲github repo

回答

7

必須使用RequestContext

from django.template import RequestContext 

def archive(request, page="1"): 
    # ... 
    return render_to_response('articles/archive.html', 
           context, 
           context_instance=RequestContext(request)) 

或者使用快捷鍵render,它像render_to_response,但使用RequestContext

from django.shortcuts import render 

def archive(request, page="1"): 
    # ... 
    return render('articles/archive.html', context) 

注意你在slider視圖中使用render

+0

就是這樣 - 謝謝! – ducin 2013-03-19 08:45:00