簡體   English   中英

Django - 不是注冊的命名空間

[英]Django - is not a registered namespace

我正在嘗試使用以下代碼在 django/python 中處理表單。


主頁.html:

<form action="{% url 'home:submit' %}" method='post'>

視圖.py:

def submit(request):
    a = request.POST(['initial'])
    return render(request, 'home/home.html', {
        'error_message': "returned"
    })

網址.py:

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^submit/$', views.submit, name='submit')
]

當我嘗試在瀏覽器中運行它時,出現錯誤:

NoReverseMatch at /home/ u'home' is not a registered namespace

以及另一條指示表單存在問題的錯誤消息。

您應該在模板中更改您的操作網址:

<form action="{% url 'submit' %} "method='post'>

關於 url 命名空間的注釋...

為了能夠使用home命名空間調用 url,您應該在主 urls.py 文件行中包含以下內容:

對於 django 1.x:

url(r'^', include('home.urls', namespace='home')),

對於 django 2.x 和 3.x

path('', include(('home.urls', 'home'), namespace='home'))

在您的主項目中,首先打開 url.py。 然后檢查,應該首先聲明了 app_name 。 如果不是,請聲明它。

例如,我的應用名稱是在 url.py 中聲明的用戶信息

app_name = "userinfo"

urlpatterns = [
    url(r'home/', views.home, name='home'),
    url(r'register/', views.registration, name='register')
]

我也面臨同樣的問題。 現在通過添加來修復它

app_name = "<name of your app>" 

在應用程序/urls.py

對於 Django 3.0,如果您在應用程序中處理 url 並在project/urls.py中使用includepath

urlpatterns = [
    path(os.getenv('ADMIN_PATH'), admin.site.urls),
    path('', include('my_simple_blog.urls', namespace='my_simple_blog')),
    path('account/', include('account.urls', namespace='account')),
]

您需要在include中指定namespace

然后在您的app/urls.py中:

app_name = 'account'

urlpatterns = [
    path('register/', registration_view, name='register'),
    path('logout/', logout_view, name='logout'),
    path('login/', login_view, name='login'),
]

app_name必須與您在project/urls.py中指定的namespace相匹配。

每當您引用這些網址時,您都需要這樣做:

{% url 'namespace:name' %}

如果您將它與redirect一起使用:

return redirect('namespace:name')

對於命名空間錯誤,請確保您已將應用程序的 url 鏈接到主 urls.py 文件中

path('app_name/',include('app_name.urls'))

同樣在您的應用程序的 urls.py 中,請確保您提及應用程序的名稱

app_name='app_name'

還要確保您已在 settings.py 中已安裝的應用程序上注冊了應用程序的名稱

正如 azmirfakkri 所說,如果您使用redirect ,請不要使用此{% url 'namespace:name' %}語法,請使用return redirect('namespace:name')

可能有兩件事可能是根本原因,在 app/urls.py 中確實包括以下內容

app_name = 'required_name'

並且在項目 urls.py 中還包括 app_name

url(r'^required_name/$',views.home,name='required_name'),

檢查:在 settings.py INSTALLED_APPS 中注冊應用程序

標簽名稱在項目內應用程序包內的urls.py文件中必須是唯一的! 模板標記路由什么和在哪里很重要。

現在 [1] 在urls.py文件中,您需要聲明變量appName並為其賦予唯一值。 例如appName = "myApp"; 在您的情況下, myHomeApp和 [2] 還定義了 urlpatterns 列表...

urlpatterns = [..., url(r'^submit/$', views.submit, name='submit'), ...];

在 html 文件中,只需將 url 標簽更改為:

<form action="{% url 'myHomeApp:submit' %}" method='post'>

這應該可以...否則就寫在這里,我們會看到如何繼續

我經常發現的一個常見錯誤是當您的模板中有一些名稱空間時,而在 YourApp.url 中您沒有任何名稱空間,因此如果您應該使用名稱空間,請在 YourApp.url 中添加類似這樣的 app_name = "blog "

然后在你的太陽穴上確保你添加了你的名字空間,所以你會有這樣的東西“假設錯誤來自edit.html ”然后在那個特定的模板上你會這樣做
"{% url 'blog:vote' pk=post.pk %}" "{% url 'blog:post_category' category.name %}"

如果你碰巧嵌套了include( s,命名空間復合,例如topappname:appname:viewname

url(r'^jet/', include('jet.urls', 'jet')),  # Django JET URLS
url(r'^jet/dashboard/', include('jet.dashboard.urls', 'jet-dashboard')),  # Django JET dashboard URLS

也許有人會發現這個建議很有幫助。

轉到您的應用程序urls.py並在 urlpatterns 之前鍵入:

app_name = 'Your app name'

對於像我這樣為這個錯誤而苦苦掙扎的人:在閱讀了這個問題的解決方案之后,我在錯誤的 urls 文件中的include函數中設置了namespace 確保您正在修改正確的 urls 文件。 對我來說,除了settings.py之外,它還放在主url.py中。 我希望這個答案可以幫助任何像我一樣感到困惑的人。

我在下面得到了同樣的錯誤:

/account/register/ 'account' 處的 NoReverseMatch 不是已注冊的命名空間

所以,我將應用程序名稱“account”的“app_name”設置為“account/urls.py” ,如下所示,然后上面的錯誤就解決了:

# "account/urls.py"

from django.urls import path
from . import views

app_name = "account" # Here

urlpatterns = [
    path("register/", views.register_request, name="register")
]

檢查你的 urls.py

urlpatterns = [
    re_path(r'^submit/expense/$', views.submit_expense, name='submit_expense'),
    re_path(r'^submit/income/$', views.submit_income, name='submit_income'),
    re_path(r'^register/$', views.register, name='register'),

]

然后打開 template.html 將例如寄存器寄存器放在您的 HTML 標簽中,如下所示:

<a class="navbar-brand" href="{% url 'register' %}">

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM