【问题标题】:How to link page from one app to another app如何将页面从一个应用程序链接到另一个应用程序
【发布时间】:2021-04-28 13:17:16
【问题描述】:

我是 django 的新手,我正在构建一个项目“myblog”,其中包含“blog”应用程序,我在其中创建了一个 base.html 文件,其中包含关于和联系人的导航栏列表。我还创建了一个“ sendemail”应用程序在同一个“myblog”项目中,我将“email.html”联系人文件放在“sendemail”应用程序的模板目录中,那么“blog”应用程序的base.html文件中的href链接应该是什么来访问email.html文件在“发送邮件”应用程序中。

这是模板目录的博客应用程序中的base.html文件。

{% load static %}

<!DOCTYPE html>

<html>
  <head>

    <title>Stand For Christ</title>
  <link rel="stylesheet" href="{% static 'css/base.css' %}">
    <link
      href="https://fonts.googleapis.com/css?family=Roboto:400,700"
      rel="stylesheet">
    <meta name="google" content="notranslate" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <link
      rel="stylesheet"
      href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"
      integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm"
      crossorigin="anonymous"
    />

  </head>

  <body>
    <style>
      body {
        font-family: "Roboto", sans-serif;
        font-size: 17px;
        background-color: #fdfdfd;
      }

    .shadow{
           box-shadow:  0 4px 2px -2px rgba(0,0,0,0.1);

       }



      .btn-danger {
        color: #fff;
        background-color: #1d2671;
        border-color: #1d2671;
      }

     .masthead {
              background: #1d2671;
              height: auto;
              padding-bottom: 15px;
              box-shadow: 0 16px 48px #E3E7EB;
              padding-top: 10px;
    }
    </style>


    <!-- Navigation -->
    <nav class="navbar navbar-expand-lg navbar-light bg-light shadow" id="mainNav">
      <div class="container-fluid">
        <a  class="navbar-brand" href="{% url 'home' %}" style="color:#1d2671;font-size:25px" >Stand For Christ Ministries</a>
        <button
          class="navbar-toggler navbar-toggler-right"
          type="button"
          data-toggle="collapse"
          data-target="#navbarResponsive"
          aria-controls="navbarResponsive"
          aria-expanded="false"
          aria-label="Toggle navigation"
        >
          <span class="navbar-toggler-icon"></span>
        </button>

        <div class="collapse navbar-collapse" id="navbarResponsive">
          <ul class="navbar-nav ml-auto">

            <li class="nav-item text-black">
              <a
                class="nav-link text-black font-weight-bold"
                href="about.html"
                >About</a>
            </li>
            
            <li class="nav-item text-black">
              <a
                class="nav-link text-black font-weight-bold"
                href="#what should be the link here."
                >Contact</a
              >
            </li>
          </ul>
        </div>
      </div>
    </div>
    </nav>


            {% block content %}
          <!-- Content Goes here -->
            {{ content | safe }}
            {% endblock content %}

    <!-- Footer -->
    <footer class="py-3 bg-green">
              <p class="m-0 text-dark text-center ">Copyright &copy; Stand For Christ Ministries</p>
    </footer>

  </body>
</html>

这是“sendemail”应用程序中的 urls.py 文件

# sendemail/urls.py
from django.contrib import admin
from django.urls import path

from .views import contactView, successView

urlpatterns = [
    path('contact/', contactView, name='contact'),
    path('success/', successView, name='success'),
]

这是“sendemail”应用的views.py文件

sendemail/views.py

from django.core.mail import send_mail, BadHeaderError
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import render, redirect
from .forms import ContactForm

def contactView(request):
    if request.method == 'GET':
        form = ContactForm()
    else:
        form = ContactForm(request.POST)
        if form.is_valid():
            subject = form.cleaned_data['subject']
            from_email = form.cleaned_data['from_email']
            message = form.cleaned_data['message']
            try:
                send_mail(subject, message, from_email, ['mahesh.usa16@gmail.com'])
            except BadHeaderError:
                return HttpResponse('Invalid header found.')
            return redirect('success')
    return render(request, "email.html", {'form': form})

def successView(request):
    return HttpResponse('Success! Thank you for your message.')

请到base.html 文件那里有联系导航栏链接并阅读那里的评论,那里的链接应该是什么?

【问题讨论】:

    标签: html django forms url


    【解决方案1】:

    在您的“sendemail”应用程序 urls.py 文件中,在 urlpatterns 之前添加

    app_name = 'sendemail'
    

    然后在base.html中使用

    href="{% url 'sendemail:contact' %}"
    

    关注此以了解更多信息:https://docs.djangoproject.com/en/3.1/topics/http/urls/#reversing-namespaced-urls

    【讨论】:

    • 非常感谢 vineet 它对我有用,现在可以看到联系表格。
    • 你能再帮我一次吗,这一次当我在填写详细信息后提交联系信息时,我没有得到“成功!感谢您的留言。' Http响应。我该怎么办。
    • 这取决于您的 email.html,当您提交表单时,必须使用 POST 方法调用 contactView,所以我认为您不需要 succesView 做任何事情。在您的contactView POST 代码(其他部分)中,将return redirect('success') 更改为您希望用户查看响应的方式
    猜你喜欢
    • 2014-05-13
    • 2021-06-19
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 2016-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多