2013-04-11 98 views
0

我真的很困惑,爲什麼我收到Http404錯誤。爲了更清楚我的繼承人代碼:Django http404錯誤urlconf混淆

我的應用程序名爲books

views.py

from django.shortcuts import render_to_response 
from django.http import Http404 
from django.template import RequestContext 
from books.models import * 


def index(request): 
    title = 'Book Gallery' 
    books = Book.objects.all().order_by('-id') 
    lang_list = Lang.objects.all().order_by('-lang') 
    template = 'books/index.djhtml' 
    context = {'books': books, 'title': title, 'lang_list': lang_list} 
    return render_to_response(template, context, context_instance=RequestContext(request)) 

def by_book_slug(request, bookslug): 
    slug = bookslug 
    try: 
     book = Book.objects.get(slug=slug) 
    except: 
     raise Http404 

    title = book.name 
    template = 'books/singlebook.djhtml' 
    context = {'book': book, 'title': title} 
    return render_to_response(template, context, context_instance=RequestContext(request)) 

def by_lang_slug(request, langslug): 
    filter = langslug 
    try: 
     language = Lang.objects.get(slug=filter) 
    except: 
     raise Http404 
    lang_list = Lang.objects.all().order_by('-lang') 
    books = Book.objects.filter(lang=language).order_by('-id') 
    title = language 
    template = 'books/by_language.djhtml' 
    context = {'books': books, 'title': title, 'filter': filter, 'lang_list': lang_list} 
    return render_to_response(template, context, context_instance=RequestContext(request)) 




urls.py inside my book app folder 

from django.conf.urls import patterns, include, url 
from books import views 

urlpatterns = patterns('', 
    url(r'(?P<langslug>.*)/$', views.by_lang_slug, name='by_lang'), 
    url(r'(?P<bookslug>.*)/$', views.by_book_slug, name='by_book'), 
    url(r'^$', views.index, name='book_gallery'), 
) 

環節,涉及到langslug網址的conf作品,但這些鏈接的URL bookslug CONF不起作用。當我嘗試切換它們時,其中一個工作,另一個不工作。

我真的不知道這裏發生了什麼。任何幫助將是一個很大的幫助。謝謝。

我的書應用程序的索引模板

{% extends 'base.djhtml' %} 

{% block title %} | Gallery{% endblock %} 
{% block stylesheets %} 
    <link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/style.css" /> 
{% endblock %} 
{% block content_header %} 
{% endblock %} 
{% block content_body %} 
    <div class="row"> 
     <div class="span3"> 
      <strong>filtered by > 
       {% if filter %} 
        {{ filter }} 
       {% else %} 
        All 
       {% endif %} 
      </strong> 
      <ul class="nav nav-list"> 
       <li class="nav-header">Filter</li> 
       <li class="nav-header 
        {% if not filter %} 
         active 
        {% endif %} 
       "><a href="/books/">All</a></li> 
       {% for list in lang_list %} 
       <li class="nav-header 
        {% if filter == list.slug %} 
         active 
        {% endif %} 
       "> 
        <a href="{% url by_lang langslug=list.slug %}">{{ list.lang }}</a> 
       </li> 
       {% endfor %} 
      </ul> 
     </div> 
     <div class="span9"> 
      {% for book in books %} 
       <div class="span3"> 
        <a href="{{ book.book_cover.url }}"> 
         <img alt="{{book.name}}" src="{{ book.thumbnail.url }}" /> 
        </a> 
        <h4>{{book.name}}</h4> 
        <p>{{book.desc|truncatewords:15}}</p> 
        <a href="{% url by_book bookslug=book.slug %}" class="btn btn-mini">View more...</a> 
       </div> 
      {% endfor %} 
     </div> 
    </div> 
{% endblock %} 

{% extends 'base.djhtml' %} 

{% block title %} | Gallery{% endblock %} 
{% block stylesheets %} 
    <link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}css/style.css" /> 
{% endblock %} 
{% block content_header %} 
{% endblock %} 
{% block content_body %} 
    <div class="row"> 
     <div class="span3"> 
      <strong>filtered by > 
       {% if filter %} 
        {{ filter }} 
       {% else %} 
        All 
       {% endif %} 
      </strong> 
      <ul class="nav nav-list"> 
       <li class="nav-header">Filter</li> 
       <li class="nav-header 
        {% if not filter %} 
         active 
        {% endif %} 
       "><a href="/books">All</a></li> 
       {% for list in lang_list %} 
       <li class="nav-header 
        {% if filter == list.slug %} 
         active 
        {% endif %} 
       "> 
        <a href="{% url by_lang langslug=list.slug %}">{{ list.lang }}</a> 
       </li> 
       {% endfor %} 
      </ul> 
     </div> 
     <div class="span9"> 
      {% for book in books %} 
       <div class="span3"> 
        <a href="{{ book.book_cover.url }}"> 
         <img alt="{{book.name}}" src="{{ book.thumbnail.url }}" /> 
        </a> 
        <h4>{{book.name}}</h4> 
        <p>{{book.desc|truncatewords:15}}</p> 
        <a href="{% url by_book bookslug=book.slug %}" class="btn btn-mini">View more...</a> 
       </div> 
      {% endfor %} 
     </div> 
    </div> 
{% endblock %} 

時指定塞不匹配的任何查詢我已經包括加薪Http404方法爲我的書應用程序的by_language模板數據庫。我感到困惑的是,當我嘗試切換langslug和bookslug urlconf時,與這些url之一關聯的鏈接不起作用。

+0

在你的Django外殼,嘗試'Book.objects.get(塞=蛞蝓)'這裏蛞蝓是您正在使用測試值,看看有什麼發生。 – karthikr 2013-04-11 03:00:20

+0

在附註中,'get_object_or_404(Book,slug = slug)'與'try..except'做同樣的事情 – karthikr 2013-04-11 03:00:58

+0

謝謝你糾正我karthikr – 2013-04-11 03:14:32

回答

0

根據您的網址,如果我把值就可以了,即使他們有不同的看法,其結果必然是:

urlpatterns = patterns('', 

    # http://localhost:8000/English/ 
    url(r'(?P<langslug>.*)/$', views.by_lang_slug, name='by_lang'), 

    # http://localhost:8000/YourBook/ 
    url(r'(?P<bookslug>.*)/$', views.by_book_slug, name='by_book'), 

    # http://localhost:8000/ 
    url(r'^$', views.index, name='book_gallery'), 
) 

你有沒有注意到它,它們有相同的模式,使第一視圖執行是by_lang_slug。所以,如果您更改訂單,另一個將首先執行。要做的最好的事情是有a unique url name

urlpatterns = patterns('', 

    # http://localhost:8000/lang/English/ 
    url(r'lang/(?P<langslug>.*)/$', views.by_lang_slug, name='by_lang'), 

    # http://localhost:8000/book/YourBook/ 
    url(r'book/(?P<bookslug>.*)/$', views.by_book_slug, name='by_book'), 

    # http://localhost:8000/ 
    url(r'^$', views.index, name='book_gallery'), 
) 

現在,他們是不同的....

+0

我很高興Cath,您救了我。非常感謝你,我一整晚都在想這件事。非常感謝你,上帝保佑 – 2013-04-11 03:46:31

+0

歡迎........ – catherine 2013-04-11 11:53:53

+0

@DjangoBot如果你覺得答案是有幫助的,一定要接受它!點擊答案旁邊的複選標記。 – 2013-04-15 06:21:19