2016-11-22 19 views
-1

大家好,最近怎么样?使用Django建立一个非常简单的网站:值得吗?

我刚刚开始使用Django,并且我已经开始了解我的头;我需要建立一个关于汽车的网站,主要有两个应用程序:

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的所有URL的列表,必须逐个写入每个链接? 这是在这种情况下使用Django的方式吗?

我会创造另一个“新闻式” APP的CarsCatalogue,这将是这么多容易让我通过管理面板来管理,但我需要每个URL来显示车的名称,如:CarsCatalogue/Seat-Ibiza并不像CarsCatalogue/1。

也许我可以做一些新闻应用程序,但改变网址生成和显示的方式?

我在阅读文档和一些Google主题和其他资源后询问了所有这些内容; 我希望你们能清除我头上的雾;

与所有这样的社会应有的尊重,

真诚,

-oKi

编辑N * 1

这是3个小时的阅读,尝试,修改,删除,再试一次。 我读了很多东西,但同时我得到了更多的困惑,因为我发现了很多东西,同时寻找如何“塞住”网址(这确实是我正在寻找的东西[现在我可以确实使用管理面板来做我想做的!]谢谢),我最终混合了很多东西。因此,使用新闻应用程序,是我迄今所做的:

python3.5 manage.py冲洗,makemigrations,迁移,createsuperuser

我修改的消息/模型。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) 

我修改的消息/ 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)}--> 

我修改的消息/ 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命令 并没有问题运行。 所以我去/管理员,我创建一个新的职位,它创建它... 但那么会发生什么? 它仍然使用旧的“范式”来生成url,包括它在使用客户端之前使用的旧密钥(id's)......所以...我期望成为mysite/news/new-human -level-urld-news 原来是mysite/news/11。

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

“FieldError在/新闻/ 11 无法解析关键字‘塞’到现场的选择是:身体,日期,身份证,标题为”

此刻我无法找到答案,我觉得这么多的东西,我只是不知道如何混为一谈。我会继续搜索。帮助表示赞赏!现在感谢! :d

+0

你需要给多一点信息。你当然不应该需要100个网址 - 你需要在每个车页上改变什么? –

+0

嗨丹尼尔,谢谢你的答案!我正在使用Jinja扩展我的标题,所以不是我从头开始创建所有页面; 根据模型,每个车页都会有几张照片/幻灯片,来自YouTube的视频,段落文本以及更多个性化内容。 谢谢! –

+0

我需要它,以便我可以发布社交等“人性化”链接,如“website.car/CarsCatalogue/aston-martin-db”! 我有一个模板/ CarsCatalogue文件夹,我想我需要在urls.py中定义,并通过views.py进行渲染。 或者我猜! :O 再次感谢。 –

回答

0

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

即使我开始通过询问汽车目录,我将解释我做什么用的消息APP代替,因为逻辑是相同的,因为这是我在我的文章中第一次编辑修改的APP 。 在模板内部,有一个“news.html”页面来呈现所有帖子的列表,还有一个“post.html”来呈现每个帖子。

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

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")), 

     ] 

我希望可以给别人有用。

天哪,你得努力学习,用这个框架:d

谢谢大家的支持,C雅:)

0

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

在几句话,Django是一个简单的方式做自己的网站,绝对无需重写代码几次。

0

没有必要创建多个URL。

从我的理解,你想为每辆车目录。

只需从显示所有车辆名称的位置创建一个视图。

然后,当你点击一个车,做一个GET请求来获取请求另一个视图功能,通过您所选择的车的详细信息。现在在Django模板上使用。为您的目录创建一个Django模板,将汽车特定数据传递给它。

您需要了解Django的模板,我认为Django模板的东西,将解决你的问题。

0

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

然后,您可以使用塞在URL:

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

和Django会使用该字段,而不是ID找到合适的内容显示。

+0

我真的认为这可能会解决我的问题。我现在将与你刚刚给我的新信息一起工作,研究你的建议,然后我会告诉你。 Rep补充说,非常感谢。 –

+0

这种情况已经演变了!我用一个编辑贴在第一篇文章中。干杯。 –

+0

您需要将一个名为“slug”的实际字段添加到模型中。 –

相关问题