【问题标题】:An app allowing to create dynamic urls based on given taxonomy and .csv file允许根据给定分类法和 .csv 文件创建动态 url 的应用程序
【发布时间】:2015-05-28 09:37:39
【问题描述】:

欢迎。

今天的问题很复杂,我需要建议甚至指导。所以不要拖延太久,我会尽可能准确地描述我的问题,并尽可能多地保留细节。

我将Django 1.8.1Python 2.7 与一些外部软件包一起使用。

所以,从一开始。我想创建一个通用且通用的服务草案,它可以以多种不同的方式使用。在许多地方多次设置它是其他时间的话题。所有这些混乱的想法总是相同的 - 部署实例,上传带有分类的文件,创建 url - 奇迹发生了,一切正常。

解释:

用户将能够上传.csv 文件,其中包含几个非常重要的字段。他们应负责为我在我的网站上的地址创建分类。 假设我需要为购物中心建立一个网站(在那个特定时间)。我的分类法描述了 django 如何创建看起来像这样的 url:

gallery-name.my_website_address.com/shop/specific-product/

正如我们所看到的那样,编写代码并不难,但是当我想启动一个具有新分类法的新网站时,问题就开始了,假设这次是律师名单,例如它可能看起来像这样:

country.my_website_address.com/city/street/law-firm/lawyer/

我想现在你可能会开始感觉到我的想法。主要问题是如何以一种方式来处理它,以保持多功能性和轻松部署具有新分类法和新 url 设置的新应用程序。如何动态创建 url,甚至可以为所有解决方案动态创建 url 吗?如何将我新创建的 .csv 文件中的 url 连接到我的视图?

随着我对这个问题的深入研究,我开始注意到一些解决方案。 我认为这是可以实现的。例如,当我们查看此链接时:

country.my_website_address.com/city/street/hospital/doctor

我们看到的第一件事 - 子域,它可以在 django 面板管理中设置。接下来是域,我们现在不关心这个,然后是子链接——我注意到它们可以由一个视图提供服务(除了最后一个元素)。 :/city/street/hospital/ 这些总是可以组合在一个位置。它们看起来总是一样的,它是一个在地图上标有位置的列表。

我们网址中的最后一个元素doctorlawyerproductcar 或其他内容将始终以相同的方式显示。只有关于它的详细信息,由 .csv 文件提供。我想我会尝试以一种允许我从文件中选择哪个项目是 a) 子域 b) 列表 c) 特定项目的方式对其进行编码

所以总结一下,你有什么想法可以让它全部工作吗?如何创建 url 并保持与视图的连接,保持多功能性?

我正在为愿意分享想法的人购买啤酒。

祝你好运!

塞巴斯蒂安·布尔津斯基

【问题讨论】:

  • 我最初的想法是,恕我直言,我建议您将问题分解为小的具体问题,并代表您展示一些进展。似乎所有这些对我来说都是可行的,但因为它很大,所以这里不是为新应用程序获取完整设计的地方。
  • 我并不是想让你们中的任何人设计我的应用程序。我只需要一些想法,以及如何实现这一点的想法。

标签: python django csv django-views django-urls


【解决方案1】:

我不完全确定我理解你的问题,但我很确定 Django 的 URL conf 可以为你解决这个问题。

在一天结束时,Django 使用正则表达式比较模式:

urlpatterns = [
    url(r'shop/([0-9a-zA-Z]+)/', views.shop_view),
    url(r'([0-9a-zA-Z]+)/([0-9a-zA-Z]+)/([0-9a-zA-Z]+)/([0-9a-zA-Z]+)/', views.listing)
]

views.listing 应该得到(city,street,company,occupation) 作为输入参数。


编辑:好的,我想我得到了你要找的东西。

with open("csv.csv","r") as fp:
    taxonomy = ['/'.join(line.split(',')) for line in fp.readlines()]
urlpatterns = [url("(" + t + ")",views.split) for t in taxonomy]

split 的样子

def split(request, string):
    taxonomy = string.split('/')

(我没试过,但应该可以)

【讨论】:

  • 是的,我知道这是可能的。我知道如何按照您描述的方式完成此操作。但这是硬编码的。我希望根据我上传的文件动态创建我的 URL,而不是停止点。
  • 您能否从您的 CSV 中提供几行示例?
  • 我不认为你明白。会有几十个文件。具有不同的分类。
  • 对。那么,对于示例分类:city/street/hospital/doctor 等,csv 文件是什么样的?对于不同的示例分类法,csv 文件是什么样的?目前,您的问题没有提供太多细节。
  • city/street/hospital/doctor 对于这个 csv 看起来像:纽约;某条街;某家医院;医生姓名;另一个分类的 10000 个其他字段让我们说 gallery-name.my_website_address.com/shop/specific-product/ 它看起来像这样:画廊名称;店铺名称;产品名称就是这样,在管理面板中我将选择其中哪些是列表子域或详细对象
猜你喜欢
  • 2013-01-06
  • 2016-01-06
  • 1970-01-01
  • 1970-01-01
  • 2014-04-26
相关资源
最近更新 更多