来自sql的django URL模式
我试图用sql查询创建urlpatterns,但这只适用于在服务器启动时sql表中已经存在的内容。是否可以让django从数据库中动态检查新URL来自sql的django URL模式,django,url-pattern,Django,Url Pattern,我试图用sql查询创建urlpatterns,但这只适用于在服务器启动时sql表中已经存在的内容。是否可以让django从数据库中动态检查新URL 我知道,正则表达式可以做到这一点,但它们太贪婪了,我的意思是,我需要在我的站点的根级别上这样做,regexp将“吃掉”所有匹配的名称,而这个regexp必须是urlpatterns列表的最后一个。你检查过django flatpages吗 动态url可能不是一个好主意,例如,动态添加的错误url行可能会使服务器停止运行 你能详细说明你的目标吗?你看
我知道,正则表达式可以做到这一点,但它们太贪婪了,我的意思是,我需要在我的站点的根级别上这样做,regexp将“吃掉”所有匹配的名称,而这个regexp必须是urlpatterns列表的最后一个。你检查过django flatpages吗 动态url可能不是一个好主意,例如,动态添加的错误url行可能会使服务器停止运行
你能详细说明你的目标吗?你看过django flatpages了吗 动态url可能不是一个好主意,例如,动态添加的错误url行可能会使服务器停止运行
你能详细说明你的目标吗?继续你对pyeleven回答的评论,你似乎已经理解了urlpatterns的要点。您不需要或不想在urlconf中指定节的选项。您要做的是获取url的每个部分的值,并将其作为参数传递给视图。例如:
(r'^?P<section>\w+)/$', 'my_view')
(r'^?P\w+/$,“我的视图”)
这将获取像
/name1/
和/name2/
这样的URL,并将name1
和name2
作为部分
参数传递给视图。因此,无论何时添加节,都不需要更改代码。继续对pyeleven的答案进行评论,您似乎已经理解了urlpatterns的要点。您不需要或不想在urlconf中指定节的选项。您要做的是获取url的每个部分的值,并将其作为参数传递给视图。例如:
(r'^?P<section>\w+)/$', 'my_view')
(r'^?P\w+/$,“我的视图”)
这将获取像
/name1/
和/name2/
这样的URL,并将name1
和name2
作为部分
参数传递给视图。因此,无论何时添加节,都无需更改代码。尽管这是可以想象到的最肮脏、最不django风格的事情,但如果您真的想:
型号.py:
from django.db import models
class Url(models.Model):
name = models.CharField(max_length=20)
from my_app.models import Url
urls = []
for url_object in Url.objects.all():
urls.append(url(url_object.name, 'my_view'))
urlpatterns = patterns('my_app.views', *urls)
url.py:
from django.db import models
class Url(models.Model):
name = models.CharField(max_length=20)
from my_app.models import Url
urls = []
for url_object in Url.objects.all():
urls.append(url(url_object.name, 'my_view'))
urlpatterns = patterns('my_app.views', *urls)
瞧。它确实有效。直接从数据库访问Url模式。请不要这样做
我现在要去洗个澡 尽管这是你能想象到的最肮脏、最没有德扬戈风格的事情,但如果你真的想: 型号.py:
from django.db import models
class Url(models.Model):
name = models.CharField(max_length=20)
from my_app.models import Url
urls = []
for url_object in Url.objects.all():
urls.append(url(url_object.name, 'my_view'))
urlpatterns = patterns('my_app.views', *urls)
url.py:
from django.db import models
class Url(models.Model):
name = models.CharField(max_length=20)
from my_app.models import Url
urls = []
for url_object in Url.objects.all():
urls.append(url(url_object.name, 'my_view'))
urlpatterns = patterns('my_app.views', *urls)
瞧。它确实有效。直接从数据库访问Url模式。请不要这样做
我现在要去洗个澡 我想把网站分为主要类别,如果你从一开始就知道你将使用哪些类别,这没有问题,但如果你不知道你需要找到一些方法来添加它们,我认为每次添加主要类别时编辑网站的源代码是个坏主意。所以,我试图从sql数据库中获取主要类别:它将允许通过管理界面轻松添加它们(甚至删除),我想获取URL,比如urlpatterns=patterns(“”,(^name1/$,major\u page),(^name2/$,major\u page),)是的,它们应该指向我将处理它们的相同视图。我想将网站划分为主要类别,如果你从一开始就知道你将使用哪些类别,这没有问题,但是如果你不知道你需要找到一些方法来添加它们,我认为每次添加主要类别时编辑网站的源代码是个坏主意。所以,我试图从sql数据库中获取主要类别:它允许通过管理界面轻松添加(甚至删除)我想要获取URL,比如urlpatterns=patterns(“”,(^name1/$,major\u page),(^name2/$,major\u page),)是的,它们应该指向我将处理它们的相同视图不,这不是我想要实现的。这将只发送到“我的视图”命名组,如section=“name1”。我希望在urlpatterns中避免使用regexp(或者可能会限制regexp的范围,但我不想将其更深一层,比如“domain.com/major/name1”),这似乎是正确的方法。如果你担心这个正则表达式会“吃掉”所有东西,只需将它放在所有其他URL的下面,以便它们首先匹配。然后,如果该部分不在DB中,只需从您的视图中提出404即可。这种方法的一个缺点是,除非您使用某种前缀限定这些URL,否则该规则将始终成功。我发现这样做的一个后果是APPEND_SLASH变量不会有任何效果,因为它只在URL匹配失败后才会生效。有人知道这件事吗?还有其他的缺点吗?不,这不是我想要达到的。这将只发送到“我的视图”命名组,如section=“name1”。我希望在urlpatterns中避免使用regexp(或者可能会限制regexp的范围,但我不想将其更深一层,比如“domain.com/major/name1”),这似乎是正确的方法。如果你担心这个正则表达式会“吃掉”所有东西,只需将它放在所有其他URL的下面,以便它们首先匹配。然后,如果该部分不在DB中,只需从您的视图中提出404即可。这种方法的一个缺点是,除非您使用某种前缀限定这些URL,否则该规则将始终成功。我发现这样做的一个后果是APPEND_SLASH变量不会有任何效果,因为它只在URL匹配失败后才会生效。有人知道这件事吗?还有其他缺点吗?不过有一个警告-我相信每次数据库中有新的url时,您都必须重新启动进程,因为我相信url.py在启动时只解析一次。这真的不是个好主意。好的,谢谢。你们能告诉我,为什么从db获取url是个坏主意吗?好吧,就像我说的——我想这段代码会继续