首页 > 解决方案 > 如何在 Django 中调用正确的视图方法?

问题描述

我有一个包含这些文件和文件夹的项目:

...
old
project
new
common
manage.py
...

我使用http://127.0.0.1:8000/old访问“旧” ,并且此文件夹中有视图、表单 url 等文件。一切正常。

我在“新”文件夹中也有类似的文件。它也运行良好: http: //127.0.0.1 :8000/old

但是,当我在视图中有一个方法(“method1”)并且我在 url 中声明它时遇到了问题。但是,它在“旧”文件夹中搜索方法 1,而不是在“新”文件夹中。

$.post('{% url "method1" %}

我有里面的网址

path('method/', views.method1, name='method1'),

我不知道为什么这个 js 在“旧”中搜索 method1。当我在旧文件夹中声明 method1 时,它工作正常。

我在这里想念什么?

更新

没有js也可以,这个方法很好,但是在js代码里面失败了我把js代码放在这里:

{% block domready %}
  $('a.cost').click(function(e){
    e.preventDefault();
    $.post('{% url "method1" %}',
      {
        action: $(this).data('action')
      },
      function(data){
        //...
      }
    );
  });
{% endblock %}

标签: jquerydjangoajax

解决方案


我认为您的其他“urls.py”有问题,它可能位于“项目”目录中。

您需要将两个应用程序都放在项目的主要 urlpatterns 中:

urlpatterns = [
    path('old/', include('old.urls')),
    path('new/', include('new.urls'))
]

如果您尝试使用不同的文件夹来存储不同的东西,那么抱歉,但默认的 django 路由器适用于应用程序,因此每个应用程序都有一个目录。因此,对于“旧”应用程序,您可以在“旧”文件夹中执行所有操作,如果您想制作另一个应用程序 - 您需要制作一个。

如果您将 a 添加namespace到应用程序的 url 中new,则需要在反转 url 时为所有名称添加前缀:

{% url "new:method1" %}

推荐阅读