首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为Django中的许多字段定义视图和URL

为Django中的许多字段定义视图和URL
EN

Stack Overflow用户
提问于 2014-03-08 16:02:55
回答 1查看 1K关注 0票数 0

我刚到Django,现在已经被困在这几天了。希望能在这里找到一些帮助。我搜索过堆栈溢出,并阅读了django文档,但未能理解这一点。我使用Django 1.6.2和Python2.7。

我正在设置一个简单的新闻应用程序,其中文章分类有一个ManyToMany关系。我在试图显示特定类别的文章时遇到了麻烦。我让索引工作,显示所有的文章,而且单一的页面视图也是工作的,例如,点击文章标题,从索引带您到文章本身。在这篇文章中,我将显示文章类别。到现在为止一切都很好。当我试图链接类别并显示该类别中所有帖子的索引时,我会得到url‘分类-存档’的NoReverseMatch

我应该像我正在尝试的那样这样做,还是经理会做得更好?接受所有的建议和答案。就像我说的,我是新来的,所以我想知道最佳实践。这是我的代码,预先感谢您处理noobie。

models.py

代码语言:javascript
复制
from django.db import models
from tinymce import models as tinymce_models

    class ArticleManager(models.Manager):
        def all(self):
        return super(ArticleManager, self).filter(active=True)

    class Category(models.Model):
        title = models.CharField(max_length=65)
        slug = models.SlugField()

    def __unicode__(self, ):
        return self.title

    class Article(models.Model):
        title = models.CharField(max_length=65)
        slug = models.SlugField()
        description = models.CharField(max_length=165)
        content = tinymce_models.HTMLField()
        categories = models.ManyToManyField(Category)
        image = models.ImageField(upload_to='article/images')
        active = models.BooleanField(default=False)
        timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
        updated = models.DateTimeField(auto_now=True, auto_now_add=False)

    objects = ArticleManager()

    def __unicode__(self, ):
        return self.title
    class Meta:
        ordering = ['-timestamp',]

views.py

代码语言:javascript
复制
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render_to_response, RequestContext, get_object_or_404

from .models import Article, Category

def all_articles(request):
    articles = Article.objects.all()
     return render_to_response('news/all.html', locals(),   context_instance=RequestContext(request))

def single_article(request, slug):
    article = get_object_or_404(Article, slug=slug)
    return render_to_response('news/single.html', locals(), context_instance=RequestContext(request))

def category_archive(request, slug):
    articles = Article.objects.filter(category=category)
    categories = Category.objects.all()
    category = get_object_or_404(Category, slug=slug)
    return render_to_response('news/category.html', locals(),    context_instance=RequestContext(request))

single.html -用于单篇文章视图

代码语言:javascript
复制
{% extends 'base.html' %}
{% block content %}

    <h1>{{ article.title }}</h1>
    <img src='{{ MEDIA_URL }}{{ article.image }}' class="article-image img-responsive"/>
    <p>{{ article.content|safe }}</p>
    <p class='small'>
**this next line gets an error for the url 'category-archive'**
    {% for category in article.categories.all %}Category: <a href='{% url "category-archive" %}{{ category.slug }}'>{{ category }}</a>{% endfor %}</p>

{% endblock %}

category.html -显示特定类别中的所有文章

代码语言:javascript
复制
{% extends 'base.html' %}


{% block content %}

    {% for article in articles %}
    <h1><a href='{% url "articles" %}{{ article.slug }}'>{{ article }}</a></h1>
    <a href='{% url "articles" %}{{ article.slug }}'><img src='{{ MEDIA_URL }}{{ article.image }}' class="img-responsive"/></a>
    {{ article.description }}

    {% if forloop.counter|divisibleby:4 %}
     <hr/>
    <div class='row'>
    {% endif %}
    {% endfor %}
    </div>

{% endblock %}

urls.py -项目urls

代码语言:javascript
复制
from django.conf.urls import patterns, include, url 
from django.conf import settings
from filebrowser.sites import site

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',


(r'^tinymce/', include('tinymce.urls')),
(r'^admin/filebrowser/', include(site.urls)),
(r'^grappelli/', include('grappelli.urls')),

(r'^static/(?P<path>.*)$', 'django.views.static.serve',{
    'document_root': settings.STATIC_ROOT
    }),
(r'^media/(?P<path>.*)$', 'django.views.static.serve',{
    'document_root': settings.MEDIA_ROOT
    }),

url(r'^admin/', include(admin.site.urls)),    
url(r'^$', 'dl.views.home', name='home'),
(r'^news/', include('news.urls')),
(r'^guides/', include('guides.urls')),


)

urls.py -新闻网址

代码语言:javascript
复制
from django.conf import settings
from django.conf.urls import patterns, include, url


urlpatterns = patterns('news.views',
    url(r'^$', 'all_articles', name='articles'),
    url(r'^(?P<slug>[-\w]+)/$', 'single_article'),
**This next one is giving me the problem I suspect - should be url to category with articles**
    url(r'^chive/(?P<slug>[-\w]+)/?', 'category_archive', name='category-archive'),

)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-08 16:41:41

我会把它作为评论发出去,但我没有这个名声。我认为问题是,URL调度程序希望类别存档也能得到弹格。因此,您应该将模板中的URL更改为:

代码语言:javascript
复制
{% url "category-archive" category.slug %}

希望这能帮上忙!

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22271640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档