I have the following url patterns defined in the urls.py
urlpatterns = [
path('', views.index, name='index'),
path('start', views.start, name='start'),
path('<slug:id>' , views.person, name="person"),
path('family/<slug:id>', views.family, name="family")
]
And the first 3 works just fine, for example if I call this link:
<a href="{% url 'pops:person' id=my_id %}">
Everything works fine and I go to the persons page, The other link such as start and index also works fine.
But somehow if I do this link:
<a href="{% url 'pops:family' id=my_id %}">
Everything fails and throws a reverse not found error:
Reverse for 'index' with keyword arguments '{'id': 'BLAHBLAH'}' not found.
The problem is, I'm not even going for the index, Why is it reversing for index when it should be reversing for family? As a result, it's not even hitting the function defined in the views at all.
Related
I'm somehow new to Django, and I don't know how to resolve what seems to be a simple bug. A lot of peoples asked more or less the same question here but any to their fixes worked for me.
So I have 2 apps, one that will work as the main menu for other apps:
Main Menu urls.py :
re_path(r'^elec/boq/', include('a0101_boq_elec_main.urls', namespace="SAMM")),
Then in the urls.py of that app I have this:
app_name='BoqElecMM'
urlpatterns = [
path('', views.boq_index.as_view(), name='boqIndex'),
path('search/', views.SearchResultView.as_view(), name='searchResult'),
path('<int:boq_project_id>', views.BoqProjectInfo.as_view(), name='BPInfo'),
]
But when I'm trying to use this in my template: <a href="{% url 'BoqElecMM:BPInfo' %}"> , I'm getting this Django error :
NoReverseMatch at /elec/boq/
Reverse for 'BPInfo' not found. 'BPInfo' is not a valid view function or pattern name.
Could some of you tell me please, what I'm doing wrong here?
Thank you in advance.
You need to pass a value for the boq_project_id parameter, so for example
{% url 'BoqElecMM:BPInfo' boq_project_id=42 %}
Of course the value you pass to the boq_project_id is normally the id of the project object. So for example, if in your template you have a project object, you can write:
{% url 'BoqElecMM:BPInfo' boq_project_id=project.pk %}
if you have an namespace=… as well, then this should also be prefixed, so with the data in your view, it is:
{% url 'SAMM:BoqElecMM:BPInfo' boq_project_id=project.pk %}
I am trying to set up links inside a tags, and when I do this procedure as seen in the code, it gives me the error:
TypeError at / 'str' object is not a mapping
It use to work fine but then decided not to
template code:
<a class="item" href="{% url 'home' %}">
urls code:
urlpatterns = [
path('admin/', include('admin_llda.urls') ),
path('about/', views.about, name = 'about'),
path('dashboard/',views.dashboard, name = 'dashboard'),
path('',views.homepage, name = 'home')
]
Check that you have properly named the name kwarg in your urls file.
It's a keyword argument, not an argument. So you should type the keyword and the value.
For example your current urlpatterns list in one of your installed apps urls.py file looks like this:
urlpatterns = [
path('', views.index, 'index'),
path('like/', views.like, 'like')
]
You should check if you have missed the name kwarg. The above code should be changed to:
urlpatterns = [
path('', views.index, name='index'),
path('like/', views.like, name='like')
]
If you want to find it faster, you can comment each app's url inclusion, in the your_project/urls.py file. When the error is gone, it means that you should check the commented app urls.py file.
Check if you have the name argument in all of your urls.py files, for each Django app you have installed.
If you have specified a name argument for any url in the path function, it should be declared like path('', views.a, name='view.a'), not like path('', views.a, 'view.a').
Notice the absence of the name argument in the latter code.
If you miss the name argument, you will get the 'TypeError at / 'str' object is not a mapping' error.
Please, check for errors in admin_llda.urls.
You might have missed adding name='' in one of the path() calls.
E.g.:
You might have written
path('',views.some_method, 'somename')
instead of path
path('',views.some_method, name= 'somename')
I just had the same issue and I found the solution! Check your urls.py and whether you failed to name any url appropriately- not necessarily
Try adding namespace to your url
e.g add the following to your 'my_app/urls.py'
app_name='my_app'
then your template should look something like: <a class="item" href="{% url 'my_app:home' %}">
finally be sure to register your app in the 'my_project/settings.py'
https://docs.djangoproject.com/en/3.0/topics/http/urls/#naming-url-patterns
I had the same issue , check the name argument in the path('',,name=" ")
I am currently trying to configure the most barebones possible setup for Django Haystack. In my HTML, I have a form that resolves a url using a named url pattern. Here is the HTML code.
<form id="search-ticket-form" class="navbar-form navbar-left dropdown" method="get"
action="{% url "search_ticket" %}" role="search">
Django returns an error every time saying "Reverse for 'search_ticket' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []"
Here is the configuration in my urls.py:
urlpatterns = patterns('',
url(r'^$', contact.views.home, name='homepage'),
#url(r'^blog/', include('zinnia.urls', namespace='zinnia')),
url(r'^profile/', include('user_profile.urls')),
url(r'^registration/', include('registration.urls')),
url(r'^comments/', include('django_comments.urls')),
url(r'^contact/', include('contact.urls')),
url(r'^tickets/', include('tickets.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^search/', include('haystack.urls')),
) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
Here is the configuration in my tickets/urls.py:
urlpatterns = patterns('',
url(r'submit_ticket/$', submit_ticket, name='submit_ticket'),
url(r'search_ticket/$', include('haystack.urls'), name='search_ticket')
)
The setup certainly looks fine. When I substitute include('haystack.urls') for a function based view named 'abc', the url resolves just fine. This makes me think that something is wrong with my Django Haystack setup, but the error certainly is misleading. Here is what my single Haystack view looks like:
class TicketIndex(indexes.BasicSearchIndex, indexes.Indexable):
def get_model(self):
return Ticket
I modeled this setup after the barebones example in Haystack's github repo (https://github.com/toastdriven/django-haystack/blob/master/example_project/bare_bones_app/search_indexes.py).
Any thoughts on what is going on here?
Can you actually name an included URL tree? It usually includes multiple URL patterns. Looking at haystack.urls you may want to try {% url "haystack_search"%}.
I have a urls.py file which contains multiple urls with same named paramaters and regex but different names. When I call a view function from the template using {% url 'name' param %} it calls the function which comes first in the urls.py file in disregard to the name. Here is the content of urls.py:
urlpatterns = patterns('accountsearch.views',
url(r'^$', 'account_search', name='account_search'),
url(r'(?P<account_uuid>[a-zA-Z0-9\-]+)/(?P<user_uuid>[a-zA-Z0-9\-]+)/$','reset_password',name='reset_password'),
url(r'(?P<account_uuid>[a-zA-Z0-9\-]+)/(?P<user_uuid>[a-zA-Z0-9\-]+)/$','reset_securityquestions',name='reset_securityquestions'),
I am trying to call reset_securityquestions from the template using:
"{% url 'reset_securityquestions' account.uuid user.uuid %}">
but it calls reset_password instead.
If I change the order of urls in urls.py to this:
urlpatterns = patterns('accountsearch.views',
url(r'^$', 'account_search', name='account_search'),
url(r'(?P<account_uuid>[a-zA-Z0-9\-]+)/(?P<user_uuid>[a-zA-Z0-9\-]+)/$', 'reset_securityquestions',
name='reset_securityquestions'),
url(r'(?P<account_uuid>[a-zA-Z0-9\-]+)/(?P<user_uuid>[a-zA-Z0-9\-]+)/$', 'reset_password', name='reset_password'),
and call reset_password using:
{% url 'reset_password' account.uuid user.uuid %}
it calls the reset_security_questions function. Where am I going wrong?
Django always take firsts matching url pattern , so rewrite the urls as :
urlpatterns = patterns('accountsearch.views',
url(r'^$', 'account_search', name='account_search'),
url(r'^reset-password/(?P<account_uuid>[a-zA-Z0-9\-]+)/(?P<user_uuid>[a-zA-Z0-9\-]+)/$','reset_password',name='reset_password'),
url(r'^security-question/(?P<account_uuid>[a-zA-Z0-9\-]+)/(?P<user_uuid>[a-zA-Z0-9\-]+)/$','reset_securityquestions',name='reset_securityquestions'),
I don't understand how you are expecting Django to know which URL to use if they both have exactly the same url pattern. When the request comes in, all Django has to go on is the URL itself, and it will always try and match those in order. With your switched patterns, you'll find that the reset_password view now doesn't work.
You need to give Django some way of distinguishing between them. Usually some literal text, either as a prefix or a suffix, would be used, for example:
r'reset/(?P<account_uuid>[a-zA-Z0-9\-]+)/(?P<user_uuid>[a-zA-Z0-9\-]+)/$'
r'security/(?P<account_uuid>[a-zA-Z0-9\-]+)/(?P<user_uuid>[a-zA-Z0-9\-]+)/$'
In my core urls.py, I have
url(r'^student/', include('studentportal.urls')),
In studentportal.urls, I have this url
url(r'^project/(?P<project_id>[0-9])/edit/$', views.editproject, name='editproject'),
url(r'^project/(?P<project_id>[0-9])/upload/$', views._upload, name='upload_document'),
url(r'^project/(?P<project_id>[0-9])/$', views.viewproject, name='viewproject'),
url(r'^download/(?P<document_id>[0-9])/', views.download, name='download_document'),
NoReverseMatch errors are popping up while rendering the template at this line
<p><a class="btn btn-default" href="{% url 'viewproject' p.id %}" role="button">View details »</a></p>
It checks these urls
2 pattern(s) tried: ['student/project/(?P<project_id>[0-9])/$', '$project/(?P<project_id>[0-9])/$']
I am pretty sure that the error is in my way of using the urls and not in views, nor templates. Also, the exclusion of '$' at the end of the urlpatterns results in NoReverseMatch errors. Even though I've read the django documentation about the urlpatterns. '^' means the start of the line '$' means that the url should end here
'(?P< named_variable >)' is used to catch a variable from the url.
So why is the pattern not matching when clearly the first pattern should match 'viewproject' with arguments '('10',)' ?
To match non-single-digit numbers, change to:
url(r'^project/(?P<project_id>[0-1000])/edit/$
or
url(r'^project/(?P<project_id>[0-9]+)/edit/$