如何使用Ajax将数据传递到Django中的模式?

如何使用Ajax将数据传递到Django中的模式?,ajax,django,bootstrap-modal,Ajax,Django,Bootstrap Modal,我试图在Django应用程序的引导模式中显示产品的详细信息 我把这个话题作为参考: HTML正确地调用了AJAX函数 AJAX函数正在打开模式 模态调用URL 我得到一个内部服务器错误。答复是: NoReverseMatch at /catalog/product-detail/ 'system' is not a registered namespace 有没有关于我做错了什么的线索,或者有没有关于如何实现我的不满的建议 谢谢 HTML-AJAX函数调用 HTML模态 网址 我认为关于这个问

我试图在Django应用程序的引导模式中显示产品的详细信息

我把这个话题作为参考:

HTML正确地调用了AJAX函数 AJAX函数正在打开模式 模态调用URL 我得到一个内部服务器错误。答复是:

NoReverseMatch at /catalog/product-detail/
'system' is not a registered namespace
有没有关于我做错了什么的线索,或者有没有关于如何实现我的不满的建议

谢谢

HTML-AJAX函数调用

HTML模态

网址


我认为关于这个问题最重要的信息应该是在您的项目的url.py文件中,您在其中包含了目录URL并使用了名称空间。您在评论中提供了此信息。看起来您没有在catalog URL.py文件顶部的urlpatterns列表上方定义应用程序,这导致了问题。因此,请检查以下内容

在catalog url.py文件中:

app_name = 'system' # if your namespace is 'system.

urlpatterns = [
...]
如果给名称空间class='catalog'

然后您应该在catalog url.py文件中定义它

app_name = 'catalog'
在这种特殊情况下,更简单的解决方案是:

由于此命名空间在您的项目中还没有相关性,因此您应该在include之后从主URL.py文件中删除namespace='system',因此它应该如下所示:

url(r'^catalog/', include('catalog.urls')),
# catalog urls.py
from django.conf.urls import url
from django.urls import include, path
from . import views

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

urlpatterns += [
    url(r'^marcas/(?P<person_id>[\d\D]+)/$', views.MarcasView, name="marcas"),
    url(r'^categorias_productos/(?P<person_id>[\d\D]+)/$', views.CategoriasView, name="categoria"),
    url(r'^your-name/$', views.create_user, name="create_user"),
    path('product-detail/', views.companyListView, name="companylist"),
]
注意:最好使用path,因为url很可能会被弃用,所以:

from django.urls import path

path('/catalog/', include('catalog.urls')),
这样你就可以忽略我上面的建议,这样你就不必在任何地方定义任何应用程序,你的问题也应该得到解决

稍后,当您继续您的项目时,您应该进一步研究如何以及何时为URL使用名称空间,因为名称空间是多余的

如果URL仍然存在问题:

您可以在主项目url.py文件中定义视图的url,以查看是否收到ajax调用,因此:

url(r'^catalog/product-detail/', views.companyListView, name='companylist'),
在最后一种情况下,也不要忘记导入主URL.py文件中的视图,否则它也不起作用,因此:

from catalog import views # in main urls.py file, if catalog is your app name
最后,主要的问题是开头的反斜杠。。。在AJAX调用url中,它导致了无反向匹配错误。因此,一个简单的结论是:如果有人在urlpatterns中定义一个url,并打开反斜杠,那么在ajax调用中应该是相同的方式,否则不打开反斜杠/。嗯,是的。。。待续

更新-解决了如何在DJANGO中使用AJAX将数据传递到HTML模式的原始问题

那么,让我们看看。很多事情在这里基本上被误解了,我试图用一种有效的方法来澄清这一点。使用AJAx/jQuery/javascript,实际上可以绕过Django模板标记/变量的大部分使用。这就是使用jQuery/javascript的全部要点

首先,我仍然建议您在Django中定义urlpatterns时使用path和re path,而不是url。正如我上面提到的,url将被弃用。使用path还有其他重要原因

因此,您的主URL.py应该如下所示:

# main project urls.py
from django.contrib import admin
from django.urls import include, path
from django.conf.urls import url

urlpatterns = [
    path('catalog/', include('catalog.urls')),
    path('admin/', admin.site.urls),
]
您的catalog url.py应如下所示:

url(r'^catalog/', include('catalog.urls')),
# catalog urls.py
from django.conf.urls import url
from django.urls import include, path
from . import views

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

urlpatterns += [
    url(r'^marcas/(?P<person_id>[\d\D]+)/$', views.MarcasView, name="marcas"),
    url(r'^categorias_productos/(?P<person_id>[\d\D]+)/$', views.CategoriasView, name="categoria"),
    url(r'^your-name/$', views.create_user, name="create_user"),
    path('product-detail/', views.companyListView, name="companylist"),
]
最后是显示modal如何与任何产品一起工作的视觉效果,这些产品向单击的产品提供所有需要的数据:

因此,您的应用程序做得很好,基础知识和模板都做得很好,但是您应该进一步研究jQuery/javascript在Django项目中的作用和功能。他们在一起真的很强大


我希望你会使用和研究上述代码,你可以使用它为您以后的项目太多。干杯

我认为关于这个问题最重要的信息应该是在项目的url.py文件中,您在其中包含了目录URL并使用了名称空间。您在评论中提供了此信息。看起来您没有在catalog URL.py文件顶部的urlpatterns列表上方定义应用程序,这导致了问题。因此,请检查以下内容

在catalog url.py文件中:

app_name = 'system' # if your namespace is 'system.

urlpatterns = [
...]
如果给名称空间class='catalog'

然后您应该在catalog url.py文件中定义它

app_name = 'catalog'
在这种特殊情况下,更简单的解决方案是:

由于此命名空间在您的项目中还没有相关性,因此您应该在include之后从主URL.py文件中删除namespace='system',因此它应该如下所示:

url(r'^catalog/', include('catalog.urls')),
# catalog urls.py
from django.conf.urls import url
from django.urls import include, path
from . import views

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

urlpatterns += [
    url(r'^marcas/(?P<person_id>[\d\D]+)/$', views.MarcasView, name="marcas"),
    url(r'^categorias_productos/(?P<person_id>[\d\D]+)/$', views.CategoriasView, name="categoria"),
    url(r'^your-name/$', views.create_user, name="create_user"),
    path('product-detail/', views.companyListView, name="companylist"),
]
注意:最好使用path,因为url很可能会被弃用,所以:

from django.urls import path

path('/catalog/', include('catalog.urls')),
这样你就可以忽略我上面的建议,这样你就不必在任何地方定义任何应用程序,你的问题也应该得到解决

稍后,当您继续您的项目时,您应该进一步研究如何以及何时为URL使用名称空间,因为名称空间是多余的

如果URL仍然存在问题:

您可以在主项目url.py文件中定义视图的url,以查看是否收到ajax调用,因此:

url(r'^catalog/product-detail/', views.companyListView, name='companylist'),
在最后一种情况下,也不要忘记导入主URL.py文件中的视图,否则它也不起作用,因此:

from catalog import views # in main urls.py file, if catalog is your app name
最后,主要的问题是开头的反斜杠。。。 在AJAX调用url中,它导致了无反向匹配错误。因此,一个简单的结论是:如果有人在urlpatterns中定义一个url,并打开反斜杠,那么在ajax调用中应该是相同的方式,否则不打开反斜杠/。嗯,是的。。。待续

更新-解决了如何在DJANGO中使用AJAX将数据传递到HTML模式的原始问题

那么,让我们看看。很多事情在这里基本上被误解了,我试图用一种有效的方法来澄清这一点。使用AJAx/jQuery/javascript,实际上可以绕过Django模板标记/变量的大部分使用。这就是使用jQuery/javascript的全部要点

首先,我仍然建议您在Django中定义urlpatterns时使用path和re path,而不是url。正如我上面提到的,url将被弃用。使用path还有其他重要原因

因此,您的主URL.py应该如下所示:

# main project urls.py
from django.contrib import admin
from django.urls import include, path
from django.conf.urls import url

urlpatterns = [
    path('catalog/', include('catalog.urls')),
    path('admin/', admin.site.urls),
]
您的catalog url.py应如下所示:

url(r'^catalog/', include('catalog.urls')),
# catalog urls.py
from django.conf.urls import url
from django.urls import include, path
from . import views

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

urlpatterns += [
    url(r'^marcas/(?P<person_id>[\d\D]+)/$', views.MarcasView, name="marcas"),
    url(r'^categorias_productos/(?P<person_id>[\d\D]+)/$', views.CategoriasView, name="categoria"),
    url(r'^your-name/$', views.create_user, name="create_user"),
    path('product-detail/', views.companyListView, name="companylist"),
]
最后是显示modal如何与任何产品一起工作的视觉效果,这些产品向单击的产品提供所有需要的数据:

因此,您的应用程序做得很好,基础知识和模板都做得很好,但是您应该进一步研究jQuery/javascript在Django项目中的作用和功能。他们在一起真的很强大


我希望你会使用和研究上述代码,你可以使用它为您以后的项目太多。干杯

您的ajax url:为空?也许您想要url:“/handle my ajax url/”,那么view.py就可以处理请求了?谢谢@WayBehind。我更新了问题信息。在AJAX代码和url.py中添加了url。现在获取500,模态将不会打开。500错误很可能是您的视图错误。控制台应提供有关错误的更多详细信息。此外,虽然我甚至不确定这是否正确,但我通常使用if request.method=='PUT',然后通过data=QueryDictrequest.body将JSON转换为Python对象。也许,Django REST对您来说是一个更好的选择。更多信息:谢谢。我试图不进入Rest框架,但我想你是对的,就是这样。我会去的。@在我身后,我还在这里挣扎。我更新了500错误的信息。回答是:NoReverseMatch at/catalog/product detail/“system”不是注册名称空间您的ajax url:,是否为空?也许您想要url:“/handle my ajax url/”,那么view.py就可以处理请求了?谢谢@WayBehind。我更新了问题信息。在AJAX代码和url.py中添加了url。现在获取500,模态将不会打开。500错误很可能是您的视图错误。控制台应提供有关错误的更多详细信息。此外,虽然我甚至不确定这是否正确,但我通常使用if request.method=='PUT',然后通过data=QueryDictrequest.body将JSON转换为Python对象。也许,Django REST对您来说是一个更好的选择。更多信息:谢谢。我试图不进入Rest框架,但我想你是对的,就是这样。我会去的。@在我身后,我还在这里挣扎。我更新了500错误的信息。回答是:NoReverseMatch at/catalog/product detail/“system”不是一个注册的名称空间,而不是bk you some@Zollie。我现在的问题是,照片不会显示出来。我猜它与路径/URL更改有关。我会仔细看看你的变化,然后试着把它记录下来。谢谢谢谢你@Zollie。我现在的问题是,照片不会显示出来。我猜它与路径/URL更改有关。我会仔细看看你的变化,然后试着把它记录下来。谢谢