将Django用于一个非常简单的网站:值得吗?

时间:2016-11-22 17:58:00

标签: django

大家好,怎么回事?

我刚刚开始使用Django,我已经开始了解它;我需要建立一个关于汽车的网站,有两个主要的APPS:

CarsCatalogue;

新闻栏目;

我发现我可以从管理面板管理新闻非常有用。我创建了典型的模型:

class Post(models.Model):       
title = models.CharField(max_length = 140)
date = models.DateTimeField()
body = models.TextField()

def __str__(self):
    return self.title

使用urls.py如下

url(r'^(?P<pk>\d+)$', DetailView.as_view(
   model = Post,
   template_name="news/post.html"))

url(r'^$', ListView.as_view(                                                    
                                queryset=Post.objects.all().order_by("-date")[:25],         
                                template_name="news/news.html")),

太好了!我可以从管理面板轻松管理新闻应用程序。现在我有一个每个新闻的页面:news / 1;新闻/ 2等;

但是当我进入CarsCatalogue时,我真的需要简化我的生活,因为我有很多汽车都有个人页面要添加,我发现自己需要修改每辆车的urls.py我需要添加,似乎我必须为每辆车修改views.py - 我正在使用渲染 - 我是对的吗?

我的意思是,拥有一百个不同函数调用一百页的Views.py是否有意义? 然后,如果我想创建一个包含CarCatalogue所有网址的列表,必须逐个编写每个链接? 这是在这种情况下使用Django的方式吗?

我会为CarsCatalogue创建另一个“新闻式”APP,这对我来说通过管理面板进行管理会更容易,但我需要每个网址显示汽车名称,例如:CarsCatalogue / Seat-Ibiza而不是像CarsCatalogue / 1。

也许我可以做类似新闻APP的事情,但改变生成和显示网址的方式?

在我阅读文档和几个Google主题和其他资源后,我问你所有这些; 我希望你们能清除我头上的雾气;

有了这样一个社区应得的所有尊重,

此致

-oKi

编辑n * 1

这是3个小时的阅读,尝试,修改,删除,再次尝试。 我读了很多东西,但与此同时我对pheraps更加困惑,因为我找到了很多东西,同时寻找如何“slu”“如果你的网址(这确实是我正在寻找的东西[现在我确实可以使用管理面板做我想做的事情!]谢谢)我最终混合了很多东西。所以,使用NEWS应用程序,到目前为止我所做的:

python3.5 manage.py flush,makemigrations,migrate,createsuperuser

我修改了news / models.py,现在看起来像这样:

from django.db import models
from django.template.defaultfilters import slugify

class Post(models.Model):           
    title = models.CharField(max_length = 140)
    date = models.DateTimeField()
    body = models.TextField()
    slug = models.SlugField(title, max_length=100, unique=True)

    def __str__(self):
        return self.title

    def slug(self):
        return slugify(self.title)

我修改了news / admin.py,现在它看起来像这样:

from django.contrib import admin
from news.models import Post

admin.site.register(Post)

class NewsAdmin(admin.ModelAdmin):
    prepopulated_fields = {"slug": (Post.slug)}  <!-- that seems makes sense looking at the Model - I also tryed {"slug": (title,)}, {"slug": (Post.title)}-->

我修改了news / urls.py,现在看起来像这样:

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

urlpatterns = [ 
            url(r'^$', ListView.as_view(                                                    
                                queryset=Post.objects.all().order_by("-date")[:25],         
                                template_name="news/news.html")),                           

            url(r'^(?P<slug>[\w-]+)$', DetailView.as_view(
                                model = Post,
                                template_name="news/post.html")),
        ]

然后我给: python3.5 manage.py runserver 它运行没有问题。 所以我去/ admin,我创建一个新帖子,它创建它... 但那会发生什么? 它仍然使用旧的“范例”来生成URL,包括它在我擦除客户端之前使用的旧密钥(id)...所以......我期望的是像mysite / news / new-human-一级urld新闻 原来是mysite / news / 11。

LOL:D,幸运的是,浏览器也给我一个错误......

/ news / 11中的FieldError 无法将关键字'slug'解析为字段。选择是:身体,日期,身份,标题“

目前我找不到答案,我找到了很多东西,我只是不知道如何混淆。我会一直在寻找。感谢帮助!谢谢你! :D

4 个答案:

答案 0 :(得分:0)

根据我对您的问题的理解,您需要的不是为您拥有的每辆车创建一个视图功能。 实际上,您需要创建一个描述CarsCatalogue的模板(html页面),其中所有CarsCatalogue具有相同的结构和不同的信息。然后用户选择一个CarsCatalogue,让我们从下拉控件中说出,然后从数据库加载数据并在模板中显示结果。 为了实现这一目标,请查看以下主题: Django forms。为了从数据库中获取您的数据,您需要在网址中传递ID,您可以看到此答案how to pass an id in django url或来自官方网站URL Dispatcher

简而言之,django是一种简单的方式来建立您的网站,绝对不需要多次重写您的代码。

答案 1 :(得分:0)

  

没有必要创建多个URL。

根据我的理解,您需要每辆车的目录。

只需创建一个显示所有汽车名称的视图。

然后当您点击汽车时,在获取请求中向另一个视图函数发出获取请求,传递您选择的汽车详细信息。现在使用Django模板。为您的目录创建一个Django模板,将汽车特定数据传递给它。

您需要了解Django模板,我认为Django模板可以解决您的问题。

答案 2 :(得分:0)

我认为您缺少的是URL中的参数可以是任何内容,而不仅仅是数字URL。如果它是一个字符串,我们称之为slug,如果设置prepopulated_fields选项,Django管理员将自动从模型中的字段创建一个slug。

然后,您可以在URL中使用该slug:

url(r'^(?P<slug>[\w-]+)$', DetailView.as_view(
   model = Car,
   template_name="news/car.html"))

并且Django将使用该字段而不是ID来查找要显示的正确内容。

答案 3 :(得分:0)

我找到了解决问题的方法。

即使我开始询问CARS目录,我也将使用NEWS APP解释我所做的事情,因为逻辑是相同的,因为那是我在帖子的第一个编辑中修改过的APP。 在模板内部,有一个“news.html”页面用于呈现所有帖子的列表,还有一个“post.html”用于呈现每个帖子。

以下是有关如何设置可以直接从ADMIN PANEL管理并且使用SLUG字段作为URL的APP的过程的一部分。

models.py:

from django.db import models

class Post(models.Model):           
    title = models.CharField(max_length = 140)
    body = models.TextField()
    slug = models.SlugField(unique=True)

def __str__(self):
    return self.title

admin.py:

from django.contrib import admin
from news.models import Post

class PostAdmin(admin.ModelAdmin):
    model = Post
    prepopulated_fields = {'slug': ('title',)}

admin.site.register(Post, PostAdmin)

urls.py:

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

urlpatterns = [ 
                url(r'^$', ListView.as_view(                                                    
                                queryset=Post.objects.all(),            
                                template_name="news/news.html")),                           

            url(r'^(?P<slug>[\w-]+)$', DetailView.as_view(
                                queryset=Post.objects.all(),
                                model = Post,
                                template_name="news/post.html")), 

        ]

我希望这对某人有用。

Jeez你必须努力学习这个框架:D

感谢大家的支持,c ya :)

相关问题