Em um curso on-line de django, o instrutor usa a url()
função para chamar visualizações e utilizar expressões regulares na lista de padrões de URL. Eu já vi outros exemplos no youtube disso. por exemplo
from django.contrib import admin
from django.urls import include
from django.conf.urls import url
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^polls/', include('polls.urls')),
]
#and in polls/urls.py
urlpatterns = [
url(r'^$', views.index, name="index"),
]
No entanto, ao seguir o tutorial do Django, eles usam, path()
por exemplo:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name="index"),
]
Além disso, expressões regulares não parecem funcionar com a path()
função, pois usar a path(r'^$', views.index, name="index")
não encontrará a mysite.com/polls/
visualização.
O uso path()
sem regex corresponde à maneira correta daqui para frente? É url()
mais poderoso, mas mais complicado, então eles estão usando path()
para começar? Ou é um caso de ferramentas diferentes para trabalhos diferentes?
python
django
django-urls
GeadaCookies
fonte
fonte
path()
eurl()
. Se você deseja ou precisa usar expressões regulares, deve usarre_path()
ouurl()
. Além disso, acho que é realmente você quem escolhe.Respostas:
Da documentação do Django para url
A principal diferença entre
path
ere_path
é quepath
usa rota sem regexVocê pode usar
re_path
para chamadas regex complexas e usar apenaspath
para pesquisas mais simplesfonte
re_path
é o que estou procurando então.A nova
django.urls.path()
função permite uma sintaxe de roteamento de URL mais simples e legível. Por exemplo, este exemplo de versões anteriores do Django:poderia ser escrito como:
A
django.conf.urls.url()
função das versões anteriores agora está disponível comodjango.urls.re_path()
. O local antigo permanece para compatibilidade com versões anteriores, sem uma depreciação iminente. Adjango.conf.urls.include()
função antiga agora é importáveldjango.urls
para que você possa usar:nos URLconfs . Para leitura adicional django doc
fonte
path()
exemplo permite números que não são de quatro dígitos./<int:year>/
significa que o ano deve ser inteiro, eu sugiro que você olhe através da documentação oficial.int
não é equivalente a[0-9]{4}
. Se ele é usado para números inteiros ou não, não tem relação com esse relacionamento. Talvez se você substituiu[0-9]{4}
por[0-9]+
sua comparação possa ser menos impreciso, embora ainda seja necessário lidar com o tipo de resultado final (str vs int?).path
é simplesmente novo no Django 2.0, que foi lançado apenas algumas semanas atrás. A maioria dos tutoriais não foi atualizada para a nova sintaxe.Certamente era para ser uma maneira mais simples de fazer as coisas; Eu não diria que o URL é mais poderoso, você deve poder expressar padrões nos dois formatos.
fonte
As expressões regulares não parecem trabalhar com a
path()
função com os seguintes argumentos:path(r'^$', views.index, name="index")
.Deve ser assim:
path('', views.index, name="index")
.O primeiro argumento deve estar em branco para inserir uma expressão regular.
fonte
Path é um novo recurso do Django 2.0. Explicado aqui: https://docs.djangoproject.com/en/2.0/releases/2.0/#whats-new-2-0
Parece uma maneira mais pitônica e habilita a não usar expressão regular no argumento que você passa para exibir ... você pode usar a função int () por exemplo.
fonte
A partir da v2.0, muitos usuários estão usando o caminho, mas podemos usar o caminho ou o URL. Por exemplo, no django 2.1.1, o mapeamento para funções através da url pode ser feito da seguinte maneira
onde posts é um aplicativo e post_home é uma função em views.py
fonte