Template picking random data from database

Template accept_sponsorship_complete

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Accept Sponsorship Sent</title>
</head>
<body>
    <p>Thank you {{ user.sponsor }}! You have Successfully Accepted Sponsorship of {{ user.alias_name }}!</p>
</body>
</html>

views.py

def accept_sponsorship(request, uidb64, token):
    try:
        uid = force_str(urlsafe_base64_decode(uidb64))
        user = CustomUser.objects.get(pk=uid)

    except (TypeError, ValueError, OverflowError, CustomUser.DoesNotExist):
        user = None

    if user is not None and account_activation_token.check_token(user, token):
        user.sponsor_accept = True
        user.save()
        return redirect('accept_sponsorship_complete')
    else:
        return HttpResponseBadRequest('Accept Sponsorship link is invalid!')
    
def accept_sponsorship_complete(request):
    return render(request, 'accept_sponsorship_complete.html') 

Output

Thank you 1! You have Successfully Accepted Sponsorship of m28t_0000!

The 1 is the pk and the m28t_0000 is the alias_name.

It is the first entry in the db and I want it to pull the user and sponsor that were just created.

First, it’s not “random data”.

One of the default context processors injects user into the context. That means that the reference to {{ user.sponsor }} is going to get the user that calls the view.

You’ve got a view, accept_sponsorship_complete that is rendering accept_sponsorship_complete.html. That view needs to supply the appropriate data in a context to pass to the render call in order for the template to display the desired results.

TemplateDoesNotExist at /accounts/accept_sponsorship/MjAz/bvo50p-c22acd9a728e0d7a0e6d6247a2893036/

accept_sponsorship_complete

views.py

def accept_sponsorship(request, uidb64, token):
    try:
        uid = force_str(urlsafe_base64_decode(uidb64))
        user = CustomUser.objects.get(pk=uid)

    except (TypeError, ValueError, OverflowError, CustomUser.DoesNotExist):
        user = None

    if user is not None and account_activation_token.check_token(user, token):
        user.sponsor_accept = True
        user.save()
        context = {
            'sponsor_name': user.sponsor,
            'user_name':user.alias_name,
        }
        return render(request, 'accept_sponsorship_complete', context=context)
    else:
        return HttpResponseBadRequest('Accept Sponsorship link is invalid!')
    
def accept_sponsorship_complete(request):
    return render(request, 'accept_sponsorship_complete.html') 

urls.py

urlpatterns =  [
    path('signup/<str:alias_name>', views.SignUpView.as_view(), name='signup.html'),
    path('activate/<uidb64>/<token>/', views.activate, name='activate'),
    path('account_activation_sent/', views.account_activation_sent, name='account_activation_sent'),
    path('account_activation_complete/', views.account_activation_complete, name='account_activation_complete'),
    path('accept_sponsorship/<uidb64>/<token>/', views.accept_sponsorship, name='accept_sponsorship'),
    path('accept_sponsorship_complete/', views.accept_sponsorship_complete, name='accept_sponsorship_complete'),
    # path('qr_view/', QRView.as_view(), name='qr_view.html')
]

Don’t know if I am on the right path.

The second parameter in render is the template file name. That’s not the name of your template file.

Not following you on this one. What is the name then?

I believe you showed it above as ‘accept_sponsorship_complete.html’ ?

ok got ya. I will add the html

That takes me back to the same as before.

Guess I am not sure where I need to put the context.

Which “before” are you referring to, and please post the current view and template.

from .forms import CustomUserCreationForm
from .models import CustomUser
from .tokens import account_activation_token
from django.contrib.auth.decorators import login_required
from django.contrib.auth import login
from django.contrib.sites.shortcuts import get_current_site
from django.core.mail import send_mail, EmailMessage
from django.http import HttpResponseBadRequest
from django.shortcuts import render, redirect
from django.template.loader import render_to_string
from django.urls import reverse_lazy
from django.utils.encoding import force_bytes, force_str
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
from django.views.generic import ListView
from django.views.generic.edit import CreateView
import re, random, qrcode, requests

# class QRView(ListView):
#     model = CustomUser
#     template_name = 'accounts/qr_view.html'

class SignUpView(CreateView):
    form_class = CustomUserCreationForm
    success_url = reverse_lazy("login")
    template_name = "signup.html"
    model = CustomUser

    def form_valid(self, form):
        request_url = form.data['url']
        alias_name_url = str(re.sub(r'/accounts/signup/', '', request_url)).lower()

        if CustomUser.objects.filter(alias_name=alias_name_url).exists() == False:
            return render(self.request, 'bad_alias.html')
        
        sponsor_info = CustomUser.objects.get(alias_name=alias_name_url)

        if sponsor_info.status != 'fr':
            if sponsor_info.status != 'fr':
                return render(self.request, 'is_fish.html')


        new_user =form.save()
        sponsor_info = CustomUser.objects.get(alias_name=alias_name_url)
        user_comments = form.data['user_comments']
        user_info = CustomUser.objects.get(pk=new_user.id)
        new_alias_name = str(form.cleaned_data['first_name'] + '_' + form.cleaned_data['last_name'][0] + str(random.randrange(0000, 9999))).lower()
        if CustomUser.objects.filter(alias_name=new_alias_name).values('alias_name').exists() == True:
            while CustomUser.objects.filter(alias_name=new_alias_name).values('alias_name').exists() == True:
                new_alias_name = str(
                    form.cleaned_data['first_name'] + '_' + form.cleaned_data['last_name'][0] + str(random.randrange(0000, 9999))).lower()
                if CustomUser.objects.filter(alias_name=new_alias_name).values('alias_name').exists() == False:
                    new_alias_name = new_alias_name
                    break
        else:
            new_alias_name = new_alias_name



        alias_email = new_alias_name + 'xxxxxxxxx

        CustomUser.objects.filter(username=form.cleaned_data['username']).update(is_active=False)
        CustomUser.objects.filter(username=form.cleaned_data['username']).update(sponsor=sponsor_info.pk)
        CustomUser.objects.filter(username=form.cleaned_data['username']).update(org_id=sponsor_info.org)
        CustomUser.objects.filter(username=form.cleaned_data['username']).update(upline=sponsor_info.downline)
        CustomUser.objects.filter(username=form.cleaned_data['username']).update(downline=str(sponsor_info.downline) + "," + str(new_user.pk))
        CustomUser.objects.filter(username=form.cleaned_data['username']).update(alias_name=new_alias_name)
        CustomUser.objects.filter(username=form.cleaned_data['username']).update(alias_email=alias_email)

        # headers = {
        #     'Content-Type': 'application/x-www-form-urlencoded',
        # }

        # data = f'address={alias_email}&forwards_to=x'

        # response = requests.post('httpzheaders=headers, data=data, auth=('x


        current_site = get_current_site(self.request)
        subject = 'Activate your account'
        message = render_to_string('account_activation_email.html', {
            'user': new_user,
            'domain': current_site.domain,
            'uid': urlsafe_base64_encode(force_bytes(new_user.pk)),
            'token': account_activation_token.make_token(new_user),
        })
        send_mail(subject, message, 'xxxxxx', [user_info.email], html_message=message)

        current_site = get_current_site(self.request)
        subject = 'Accept New User'
        message = render_to_string('accept_sponsorship_email.html', {
            'user': new_alias_name,
            'domain': current_site.domain,
            'uid': urlsafe_base64_encode(force_bytes(new_user.id)),
            'token': account_activation_token.make_token(new_user),
            'sponsor_name': sponsor_info.alias_name,
            'comments': user_comments,
        })
        send_mail(subject, message, 'xxxxxx', [sponsor_info.email], html_message=message,)

        ### Returns View for User - Sponsor Does Not Need One
        return redirect('account_activation_sent')

### User Account Activation
def account_activation_sent(request):
    return render(request, 'account_activation_sent.html')


def activate(request, uidb64, token):
    try:
        uid = force_str(urlsafe_base64_decode(uidb64))
        user = CustomUser.objects.get(pk=uid)

    except (TypeError, ValueError, OverflowError, CustomUser.DoesNotExist):
        user = None

    if user is not None and account_activation_token.check_token(user, token):
        user.is_active = True
        user.save()
        login(request, user)
        return redirect('account_activation_complete')
    else:
        return HttpResponseBadRequest('Activation link is invalid!')

def account_activation_complete(request):
    return render(request, 'account_activation_complete.html') 


### Sponsor Accept
def accept_sponsorship(request, uidb64, token):
    try:
        uid = force_str(urlsafe_base64_decode(uidb64))
        user = CustomUser.objects.get(pk=uid)

    except (TypeError, ValueError, OverflowError, CustomUser.DoesNotExist):
        user = None

    if user is not None and account_activation_token.check_token(user, token):
        user.sponsor_accept = True
        user.save()
        return redirect('accept_sponsorship_complete.html')
    else:
        return HttpResponseBadRequest('Accept Sponsorship link is invalid!')
    
def accept_sponsorship_complete(request):
    # context = {
    #     'sponsor_name': user.sponsor,
    #     'user_name':user.alias_name,
    # }
    return render(request, 'accept_sponsorship_complete.html') 

####################################################################################################

Ok, you don’t redirect to a template.

This is not correct:

You either need to redirect to a view, like you had above at:

or

you can render the template in the view, like you had at:

(except you want to specify the correct file name here)

You also need to ensure that the values that you’re defining in the context are the same values being rendered in the template.

For example, you have:

But in the template posted at the top you’re trying to render:

which is not what you were passing in the context.

I get this error:

NoReverseMatch at /accounts/accept_sponsorship/MjE0/bvo7so-9be082b287843fd4856421e6e5c7163e/

Reverse for ‘accept_sponsorship_complete’ with keyword arguments ‘{‘kwargs’: {‘sponsor_name’: ‘jeff_l0000’, ‘user_name’: ‘m28t_s1122’}}’ not found. 1 pattern(s) tried: [‘accounts/accept_sponsorship_complete/\Z’]

with this code:

### Sponsor Accept
def accept_sponsorship(request, uidb64, token):
    try:
        uid = force_str(urlsafe_base64_decode(uidb64))
        user = CustomUser.objects.get(pk=uid)

    except (TypeError, ValueError, OverflowError, CustomUser.DoesNotExist):
        user = None

    if user is not None and account_activation_token.check_token(user, token):
        user.sponsor_accept = True
        user.save()
        context = {
        'sponsor_name': CustomUser.objects.filter(pk=user.sponsor).values('alias_name')[0]['alias_name'],
        'user_name':user.alias_name,
      }
        return redirect('accept_sponsorship_complete', kwargs=context)
    else:
        return HttpResponseBadRequest('Accept Sponsorship link is invalid!')
    
def accept_sponsorship_complete(request):
    # context = {
    #     'sponsor_name': user.sponsor,
    #     'user_name':user.alias_name,
    # }
    return render(request, 'accept_sponsorship_complete.html') 

It is returning the information I need.

Updated template

<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Accept Sponsorship Sent</title>
</head>
<body>
    <p>Thank you {{ sponsor_name }}! You have Successfully Accepted Sponsorship of {{ user_name }}!</p>
</body>
</html>

Got it with this

return render(request, 'accept_sponsorship_complete.html', context=context)