使Django接受带有无限参数的url

时间:2019-08-05 17:51:00

标签: python django django-urls

我想让Django接受由无限数量的参数组成的url。 Dropbox之类的事情一直在发生。文件所在的每个文件夹的每个参数。可能有无限多个子文件夹。参数为字母数字。

2 个答案:

答案 0 :(得分:2)

您可以创建一个URL,该URL接受一个任意长的参数,而不包含某种形式的分隔符,然后在您的视图中用该分隔符分隔该参数。对于类似参数的路径:

x

现在,对此URL的任何请求(例如url(r'^prefix/(?P<path>[a-zA-Z\/]*)/$', your_view), def your_view(request, path): folders = path.split('/') 和文件夹都将包含prefix/folder1/folder2/folder3/

答案 1 :(得分:0)

我不认为您可以使用Django URLS定义无限的url参数。因为使用django,您必须声明站点将要使用的URL。

但是,如果您要专门讨论文件夹和文件,则可以在模型中使用FileField来进行此操作,该模型可以决定保存文件的位置并将路径保存在instance.filefield.url中。然后插入搜索Django URL,搜索Nginx URL等。 {site_url}/static/{any}/{folder}/{you}/{want}/{etc}/

包括在内,您可以使用这样的模型。

class Folder(models.Model):
    name = models.CharField(...)
    parent = mdoels.ForeignKey('self')
    ...

    def get_path_to_here(self):
        # here you have the full url getting all parents folders.
        ...


def func_to_declare_where_save_it(instance, filename):
    return os.path.join(
        f'{instance.folder.get_path_to_here()}',
        f'{filename}')


class File(models.Model):
   name = models.CharField(...)
   folder = models.ForeignKey(Folder)
   file = models.FileField(upload_to=func_to_declare_where_save_it)